存档

‘工作’ 分类的存档

联合信任时间戳服务中心

2017年7月31日 没有评论

偶然看到一篇文章,提到了电子证据,就拿这个公司提供的服务被法庭采信作为旁证。
简单理了一下,略长见识,只不过里面还是有一些不足。不是广告,也不是要去抹黑谁,纯做技术讨论。

给出官网:http://www.tsa.cn/
具体的操作流程文档:http://www.tsa.cn/r/cms/www/tsa/files/%E5%8F%AF%E4%BF%A1%E6%97%B6%E9%97%B4%E6%88%B3%E4%BA%92%E8%81%94%E7%BD%91%E7%94%B5%E5%AD%90%E6%95%B0%E6%8D%AE%E5%8F%96%E8%AF%81%E5%8F%8A%E5%9B%BA%E5%8C%96%E4%BF%9D%E5%85%A8%E6%93%8D%E4%BD%9C%E6%8C%87%E5%BC%95v1.pdf
操作流程文档所在页面:http://www.tsa.cn/html/dzzjghbq/

中华人民共和国电子签名法(2015年修正):http://www.miit.gov.cn/n1146285/n1146352/n3054355/n3057254/n3057259/c3868973/content.html
rfc3161官方文档:https://tools.ietf.org/html/rfc3161

操作流程文档的思路:
1、开始屏幕录像。确保中间的环境检查和后续取证操作都被录像。
2、用公安部认可的杀毒软件更新后查杀,确认无木马。
3、清缓存、cookie、自动填充等数据,确保其回到最原始状态。
4、查进程列表,事后用于确认没有非法进程。
5、检查hosts文件,确保没有绑定host。
6、确认IE浏览器没有设置代理。
7、ipconfig /all 显示完整的配置信息。
8、ping 域名,确认其合法。
9、tracert 确认其访问路径。
10、访问tsa官网,显示当前时间。
11、取证,文件放到指定目录,用官网方式生成tsa专用签名(先生成文件hash值,然后去官网引入时间戳后签名)。
12、录像文件签名,留证。

其中11和12的时间间隔足够短,来证明没有时间来改动录像,证实操作步骤的合法性。两个证据一起决定了整体的可信。
官网列举了一堆案例,来证明其可信。
更多内容…

RedisCluster数据覆盖问题

2017年6月28日 没有评论

碰到一个典型的问题:
redis的set数据,有大量的读redis和少量的写源(同时删除redis中对应的key),在读的时候做miss回源。

碰到的问题:
少量写后删除key,会同时有大量的读去回源,源压力暴涨,且导致了多次写。回源越慢,源的压力就越大。

计划由读miss回源改为写时覆盖,问题是:set好像没办法覆盖,只能先删除key后再加,删除key时,还是会引发读回源。

看到redis支持rename,就想到一个办法:
少量写的时候,先把数据写到一个新key里,然后rename成老key,从命令上看是支持覆盖的:https://redis.io/commands/rename

RENAME key newkey

Available since 1.0.0.
Time complexity: O(1)
Renames key to newkey. It returns an error when key does not exist. If newkey already exists it is overwritten, when this happens RENAME executes an implicit DEL operation, so if the deleted key contains a very big value it may cause high latency even if RENAME itself is usually a constant-time operation.
Note: Before Redis 3.2.0, an error is returned if source and destination names are the same.
Return value
Simple string reply

Examples
redis> SET mykey "Hello"
"OK"
redis> RENAME mykey myotherkey
"OK"
redis> GET myotherkey
"Hello"
redis> 

结果是出错:

>rename newkey oldkey
(error) CROSSSLOT Keys in request don't hash to the same slot

更多内容…

分类: 工作 标签: , , , ,

MySQL的统计数值问题

2017年6月22日 没有评论

典型的明细与统计数值表问题:
以用户好友关系系统举例:用户的好友有个明细列表,还有一个用户好友个统计数值,便于直接返回好友数,不用每次都count。

问题:
如果增减好友时,用++或–来操作统计值表,容易出现不一致的情况,而且会一直错下去。

解决方案:
更新统计数值的时候,不是+1或-1,而且count后更新。

看似解决了问题,实际上带来了新的问题:
当用户数不多的时候,比如几百或几千,效率很高。但当好友数达到百万时,每次count会耗时两三秒,数据库的负载就会出现严重问题。

最终的解决方案:
当好友数在万以下时,采用count更新;过万以后,用+1或-1来操作。
因为当好友超过一万以后,已经没法人工去数了。有误差也不会影响体验了。

分类: 工作 标签: ,

一种快速失败机制的应用

2017年6月21日 没有评论

描述一下之前的痛点:
一个取列表的功能,QPS近万,当带登录态的时候,需多取下来当前用户发布且未审核过的内容,未审核过的概率非常小,万分之一。
验用户态的响应时间有波动,导致取列表功能受影响。

问题解决思路:
用户票的过期时间比较久,本地验票加一层缓存,miss后回源验票。一段时间后,发现这种miss后回源时,受验票服务的波动影响也很大。
然后引入另一种策略:miss时,直接以无身份状态走,异步验票,成功后记入缓存。

最后扩展到全平台:
非必须登录的功能验票时,都采用这个机制。一般是一些客态的查询功能来支持这种方式。
其它的非查询或主态查询(类似于我的***功能),都强制同步验票。

分类: 工作 标签:

go语言的静态初始化

2017年5月17日 没有评论

Go的init函数,意义近似于Java里的静态初始化,也就是static的代码块。
但二者的运行时机正好是想反的。

Java的好理解一些,先执行到谁,就执行谁的静态初始化,测试用例:
更多内容…

分类: 工作 标签: , , , ,

go中StructTag的修改问题

2017年5月15日 没有评论

之前发现Field的Tag信息是可修改的,然后真正在用的时候,发现只是修改了当前Field中的StructTag副本,原始信息本未修改。

原文地址:go语言反射遇到的几个问题

更多内容…

分类: 工作 标签: ,