中国互联网迎来史上最强监管风暴
数字证书,解决公钥传输信任问题
如何解决公钥传输问题呢,从现实生活中的场景找答案,员工入职时,企业一般会要求提供学历证明,显然不是什么阿猫阿狗的本本都可称为学历,这个学历必须由第三方权威机构(Certificate Authority,简称 CA)即教育部颁发,同理,server 也可以向 CA 申请证书,在证书中附上公钥,然后将证书传给 client,证书由站点管理者向 CA 申请,申请的时候会提交 DNS 主机名等信息,CA 会根据这些信息生成证书 有人说对这个密钥加密不就完了,但对方如果要解密这个密钥还是要传加密密钥给对方,依然还是会被中间人截获的,这么看来直接传输密钥无论怎样都无法摆脱俄罗斯套娃的难题,是不可行的。 非对称加密:解决单向对称密钥的传输问题 直接传输密钥无论从哪一端传从上节分析来看是不行了,这里我们再看另一种加密方式:非对称加密。 非对称加密即加解密双方使用不同的密钥,一把作为公钥,可以公开的,一把作为私钥,不能公开,公钥加密的密文只有私钥可以解密,私钥加密的内容,也只有公钥可以解密。 注:私钥加密其实这个说法其实并不严谨,准确的说私钥加密应该叫私钥签名,因为私密加密的信息公钥是可以解密的,而公钥是公开的,任何人都可以拿到,用公钥解密叫做验签
这样的话对于 server 来说,保管好私钥,发布公钥给其他 client, 其他 client 只要把对称加密的密钥加密传给 server 即可,如此一来由于公钥加密只有私钥能解密,而私钥只有 server 有,所以能保证 client 向 server 传输是安全的,server 解密后即可拿到对称加密密钥,这样交换了密钥之后就可以用对称加密密钥通信了。 假设服务器依次启动,我们来分析一下选举过程: (1)服务器1启动 发起一次选举,服务器1投自己一票,此时服务器1票数一票,不够半数以上(3票),选举无法完成。 投票结果:服务器1为1票。 服务器1状态保持为LOOKING。 (2)服务器2启动 发起一次选举,服务器1和2分别投自己一票,此时服务器1发现服务器2的id比自己大,更改选票投给服务器2。 投票结果:服务器1为0票,服务器2为2票。
服务器1,2状态保持LOOKING ## 常识和数据 CPU拷贝数据一般一秒钟能做到几百兆,当然每次拷贝的数据长度不同,吞吐不同。 一次函数执行如果耗费超过1000 cycles就比较大了(刨除调用子函数的开销)。 pthread_mutex_t首次加解锁大概耗时4000-5000 cycles左右,之后,每次加解锁大概120 cycles,O2优化的时候100 cycles,spinlock耗时略少。 lock内存总线+xchg需要50 cycles,一次内存屏障要50 cycles。 有一些无锁的技术,比如linux kernel里的kfifo,主要使用了整型回绕+内存屏障。 # 四、怎么做性能优化(TODO) 两个?向:提?运?速度 + 减少计算量。 性能优化监控先?,要基于数据??基于猜测,要搭建能尽量模拟真实运?状态的压?测试环境,在此基于上获取的profiling数据才是有?的。 方法论:监控 -> 分析 -> 优化 三部曲 # 五、几个具体问题(TODO) 1. 如何定位CPU瓶颈? 2. 如何定位IO瓶颈? 3. 如何定位?络瓶颈? 4.如何定位锁的问题? 大家都知道锁会引入额外开销,但锁的开销到底有多大,估计很多人没有实测过,我可以给一个数据,一般单次加解锁100 cycles,spinlock或者cas更快一点。 使用锁的时候,要注意锁的粒度,但锁的粒度也不是越小越好,太大会增加撞锁的概率,太小会导致代码更难写。 多线程场景下,如果cpu利用率上不去,而系统吞吐也上不去,那就有可能是锁导致的性能下降,这个时候,可以观察程序的sys cpu和usr cpu,这个时候通过perf如果发现lock的开销大,那就没错了。 5. 如何提?并发能??
# 六、实践经验和案例分析(TODO) (编辑:南通站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |