-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdb.json
1 lines (1 loc) · 286 KB
/
db.json
1
{"meta":{"version":1,"warehouse":"2.2.0"},"models":{"Asset":[{"_id":"source/CNAME","path":"CNAME","modified":0,"renderable":0},{"_id":"themes/matery/source/css/gitment.css","path":"css/gitment.css","modified":0,"renderable":1},{"_id":"themes/matery/source/css/my.css","path":"css/my.css","modified":0,"renderable":1},{"_id":"themes/matery/source/css/my-gitalk.css","path":"css/my-gitalk.css","modified":0,"renderable":1},{"_id":"themes/matery/source/css/matery.css","path":"css/matery.css","modified":0,"renderable":1},{"_id":"themes/matery/source/font/OFL.txt","path":"font/OFL.txt","modified":0,"renderable":1},{"_id":"themes/matery/source/js/matery.js","path":"js/matery.js","modified":0,"renderable":1},{"_id":"themes/matery/source/js/search.js","path":"js/search.js","modified":0,"renderable":1},{"_id":"themes/matery/source/font/Metropolis-Medium.ttf","path":"font/Metropolis-Medium.ttf","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/logo.png","path":"medias/logo.png","modified":0,"renderable":1},{"_id":"themes/matery/source/favicon.png","path":"favicon.png","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/animate/animate.min.css","path":"libs/animate/animate.min.css","modified":0,"renderable":1},{"_id":"themes/matery/source/font/GT-Super-Text-Book.otf","path":"font/GT-Super-Text-Book.otf","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/aos/aos.css","path":"libs/aos/aos.css","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/aos/aos.js","path":"libs/aos/aos.js","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/aplayer/APlayer.min.css","path":"libs/aplayer/APlayer.min.css","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/dplayer/DPlayer.min.css","path":"libs/dplayer/DPlayer.min.css","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/cryptojs/crypto-js.min.js","path":"libs/cryptojs/crypto-js.min.js","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/gitment/gitment-default.css","path":"libs/gitment/gitment-default.css","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/jqcloud/jqcloud-1.0.4.min.js","path":"libs/jqcloud/jqcloud-1.0.4.min.js","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/jqcloud/jqcloud.css","path":"libs/jqcloud/jqcloud.css","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/gitalk/gitalk.css","path":"libs/gitalk/gitalk.css","modified":0,"renderable":1},{"_id":"themes/matery/source/font/gotham-rounded-book.otf","path":"font/gotham-rounded-book.otf","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/others/busuanzi.pure.mini.js","path":"libs/others/busuanzi.pure.mini.js","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/others/clicklove.js","path":"libs/others/clicklove.js","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/others/fireworks.js","path":"libs/others/fireworks.js","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/others/explosion.min.js","path":"libs/others/explosion.min.js","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/others/snow.js","path":"libs/others/snow.js","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/others/text.js","path":"libs/others/text.js","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/scrollprogress/scrollProgress.min.js","path":"libs/scrollprogress/scrollProgress.min.js","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/masonry/masonry.pkgd.min.js","path":"libs/masonry/masonry.pkgd.min.js","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/tocbot/tocbot.css","path":"libs/tocbot/tocbot.css","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/tocbot/tocbot.min.js","path":"libs/tocbot/tocbot.min.js","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/babyq.png","path":"medias/avatars/babyq.png","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/cww97.jpg","path":"medias/avatars/cww97.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/fun4go.png","path":"medias/avatars/fun4go.png","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/huaji.jpg","path":"medias/avatars/huaji.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/hael.jpg","path":"medias/avatars/hael.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/hzwer.jpg","path":"medias/avatars/hzwer.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/ids2.jpg","path":"medias/avatars/ids2.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/ldy.jpg","path":"medias/avatars/ldy.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/lijiaqian.png","path":"medias/avatars/lijiaqian.png","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/kewlgrl.jpg","path":"medias/avatars/kewlgrl.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/liyucheng.jpg","path":"medias/avatars/liyucheng.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/liyangzone.jpg","path":"medias/avatars/liyangzone.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/michael.jpg","path":"medias/avatars/michael.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/mpy634.png","path":"medias/avatars/mpy634.png","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/myzhihu.png","path":"medias/avatars/myzhihu.png","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/qiqiang.jpg","path":"medias/avatars/qiqiang.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/mouse.jpg","path":"medias/avatars/mouse.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/sunchangzhi.jpg","path":"medias/avatars/sunchangzhi.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/spacesac.png","path":"medias/avatars/spacesac.png","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/taowei.jpg","path":"medias/avatars/taowei.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/tencent.png","path":"medias/avatars/tencent.png","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/zhaokangzhe.jpg","path":"medias/avatars/zhaokangzhe.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/pic/1.jpg","path":"medias/pic/1.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/reward/wechat.png","path":"medias/reward/wechat.png","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/aplayer/APlayer.min.js","path":"libs/aplayer/APlayer.min.js","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/dplayer/DPlayer.min.js","path":"libs/dplayer/DPlayer.min.js","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/gitment/gitment.js","path":"libs/gitment/gitment.js","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/jquery/jquery-2.2.0.min.js","path":"libs/jquery/jquery-2.2.0.min.js","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/valine/Valine.min.js","path":"libs/valine/Valine.min.js","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/duyupei.jpg","path":"medias/avatars/duyupei.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/antnlp.ico","path":"medias/avatars/antnlp.ico","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/gsy.jpg","path":"medias/avatars/gsy.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/milyyy.jpg","path":"medias/avatars/milyyy.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/mizunashi.png","path":"medias/avatars/mizunashi.png","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/qiandongwei.jpg","path":"medias/avatars/qiandongwei.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/xuzhongyou.jpg","path":"medias/avatars/xuzhongyou.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/zhangting.jpg","path":"medias/avatars/zhangting.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/zzw.jpg","path":"medias/avatars/zzw.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/reward/alipay.jpg","path":"medias/reward/alipay.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/awesome/css/font-awesome.min.css","path":"libs/awesome/css/font-awesome.min.css","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/lightGallery/fonts/lg.eot","path":"libs/lightGallery/fonts/lg.eot","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/lightGallery/fonts/lg.ttf","path":"libs/lightGallery/fonts/lg.ttf","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/lightGallery/fonts/lg.woff","path":"libs/lightGallery/fonts/lg.woff","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/lightGallery/fonts/lg.svg","path":"libs/lightGallery/fonts/lg.svg","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/lightGallery/css/lightgallery.min.css","path":"libs/lightGallery/css/lightgallery.min.css","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/lightGallery/img/loading.gif","path":"libs/lightGallery/img/loading.gif","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/lightGallery/img/video-play.png","path":"libs/lightGallery/img/video-play.png","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/lightGallery/img/vimeo-play.png","path":"libs/lightGallery/img/vimeo-play.png","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/lightGallery/img/youtube-play.png","path":"libs/lightGallery/img/youtube-play.png","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/gitalk/gitalk.min.js","path":"libs/gitalk/gitalk.min.js","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/share/css/share.min.css","path":"libs/share/css/share.min.css","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/share/js/jquery.share.min.js","path":"libs/share/js/jquery.share.min.js","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/share/fonts/iconfont.eot","path":"libs/share/fonts/iconfont.eot","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/share/fonts/iconfont.svg","path":"libs/share/fonts/iconfont.svg","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/share/js/social-share.min.js","path":"libs/share/js/social-share.min.js","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/share/fonts/iconfont.ttf","path":"libs/share/fonts/iconfont.ttf","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/share/fonts/iconfont.woff","path":"libs/share/fonts/iconfont.woff","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/materialize/materialize.min.css","path":"libs/materialize/materialize.min.css","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/materialize/materialize.min.js","path":"libs/materialize/materialize.min.js","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/valine/av-min.js","path":"libs/valine/av-min.js","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/0xbird.png","path":"medias/avatars/0xbird.png","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/mashiro.jpg","path":"medias/avatars/mashiro.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/lyn-draw.jpg","path":"medias/avatars/lyn-draw.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/qianqian.png","path":"medias/avatars/qianqian.png","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/music/avatars/tiantangdemogui.jpg","path":"medias/music/avatars/tiantangdemogui.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/music/avatars/yequ.jpg","path":"medias/music/avatars/yequ.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/music/avatars/yiluxiangbei.jpg","path":"medias/music/avatars/yiluxiangbei.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/awesome/fonts/fontawesome-webfont.woff","path":"libs/awesome/fonts/fontawesome-webfont.woff","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/awesome/fonts/fontawesome-webfont.woff2","path":"libs/awesome/fonts/fontawesome-webfont.woff2","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/lightGallery/js/lightgallery-all.min.js","path":"libs/lightGallery/js/lightgallery-all.min.js","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/avatar.jpg","path":"medias/avatars/avatar.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/jitao.jpg","path":"medias/avatars/jitao.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/lzh.png","path":"medias/avatars/lzh.png","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/awesome/fonts/fontawesome-webfont.ttf","path":"libs/awesome/fonts/fontawesome-webfont.ttf","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/jingjing.jpg","path":"medias/avatars/jingjing.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/awesome/fonts/fontawesome-webfont.eot","path":"libs/awesome/fonts/fontawesome-webfont.eot","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/awesome/fonts/FontAwesome.otf","path":"libs/awesome/fonts/FontAwesome.otf","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/music/avatars/daoshu.jpg","path":"medias/music/avatars/daoshu.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/banner/7.jpg","path":"medias/banner/7.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/banner/6.jpg","path":"medias/banner/6.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/avatars/zhangyi.jpg","path":"medias/avatars/zhangyi.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/featureimages/10.jpg","path":"medias/featureimages/10.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/featureimages/6.jpg","path":"medias/featureimages/6.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/featureimages/7.jpg","path":"medias/featureimages/7.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/banner/10.jpg","path":"medias/banner/10.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/font/Baloo2-VariableFont_wght.ttf","path":"font/Baloo2-VariableFont_wght.ttf","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/awesome/fonts/fontawesome-webfont.svg","path":"libs/awesome/fonts/fontawesome-webfont.svg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/banner/1.jpg","path":"medias/banner/1.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/banner/5.jpg","path":"medias/banner/5.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/featureimages/1.jpg","path":"medias/featureimages/1.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/featureimages/5.jpg","path":"medias/featureimages/5.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/libs/echarts/echarts.min.js","path":"libs/echarts/echarts.min.js","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/banner/9.jpg","path":"medias/banner/9.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/featureimages/9.jpg","path":"medias/featureimages/9.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/pic/2.jpg","path":"medias/pic/2.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/banner/12.jpg","path":"medias/banner/12.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/featureimages/12.jpg","path":"medias/featureimages/12.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/banner/4.jpg","path":"medias/banner/4.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/featureimages/4.jpg","path":"medias/featureimages/4.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/banner/3.jpg","path":"medias/banner/3.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/featureimages/3.jpg","path":"medias/featureimages/3.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/banner/2.jpg","path":"medias/banner/2.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/featureimages/8.jpg","path":"medias/featureimages/8.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/banner/8.jpg","path":"medias/banner/8.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/featureimages/2.jpg","path":"medias/featureimages/2.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/banner/11.jpg","path":"medias/banner/11.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/featureimages/11.jpg","path":"medias/featureimages/11.jpg","modified":0,"renderable":1},{"_id":"themes/matery/source/medias/featureimages/psc5.jpeg","path":"medias/featureimages/psc5.jpeg","modified":0,"renderable":1},{"_id":"themes/matery/source/font/LXGWWenKai-Regular.ttf","path":"font/LXGWWenKai-Regular.ttf","modified":0,"renderable":1}],"Cache":[{"_id":"source/CNAME","hash":"64207402940522edc9298a237def61b761ce8966","modified":1672983810698},{"_id":"source/404.md","hash":"430bd27a3459f1fa51af3beefb8717d99ccc785c","modified":1668758301454},{"_id":"source/.DS_Store","hash":"ca4a222d685784aa7d51824c9efc1bf8b34b2e45","modified":1673442195715},{"_id":"themes/matery/.gitignore","hash":"eaa3d84cb77d92a21b111fd1e37f53edc1ff9de0","modified":1668758301563},{"_id":"themes/matery/LICENSE","hash":"7df059597099bb7dcf25d2a9aedfaf4465f72d8d","modified":1668758301564},{"_id":"themes/matery/README.md","hash":"c46e2a112951e49af60ad6ad7a2893738e3e413d","modified":1668758301564},{"_id":"themes/matery/README_CN.md","hash":"302393db1fa6c0911558402ab8c75745516fa5ed","modified":1668758301565},{"_id":"themes/matery/.DS_Store","hash":"c0c559a7eb7d3da452991082604ead06112605a2","modified":1673438751220},{"_id":"themes/matery/_config.yml","hash":"df1bf3021c307031ea98dbf033c4619b0f761d37","modified":1673109257438},{"_id":"source/_posts/.DS_Store","hash":"20e28719e378e4aed16a47d71b6a442d5fbf292f","modified":1673438751221},{"_id":"source/Resume/index.md","hash":"6a6995ff47aea858e255d77d8d478b8cde222d53","modified":1673445723877},{"_id":"source/_posts/songcisishou.md","hash":"b810988444282cba601468eb47943e4a625dc7a9","modified":1668758301550},{"_id":"source/_posts/暮秋入冬琐语.md","hash":"e9fb69de494d89781a9e1c37818bdae61c82c103","modified":1668758301554},{"_id":"source/_posts/consensus.md","hash":"d863a2884ae41cacaa3e0f5c7b11e87ea1b6671a","modified":1668758301454},{"_id":"source/archives/index.md","hash":"30a0e3a59be650ae34d7bb86ac7da53e21e9cf5b","modified":1668758301558},{"_id":"source/about/index.md","hash":"b75f41755c1332d030d3c38ac75d0dced4981e2d","modified":1673097127467},{"_id":"source/categories/index.md","hash":"67687d3f908737f7c680f096b3e80d9412f23b0e","modified":1668758301559},{"_id":"source/contact/index.md","hash":"75936620de29eb25304e0658adcef2f04e842492","modified":1672983810699},{"_id":"source/friends/index.md","hash":"0200295d40bdda9363998d4fce7e9c0994badade","modified":1672983810700},{"_id":"source/tags/index.md","hash":"fe3d7ecc91b81b062a6a60c06859dc24b9d704ac","modified":1668758301561},{"_id":"themes/matery/languages/default.yml","hash":"08b43a89b366b45a84b572da8e7139104829df32","modified":1668758301566},{"_id":"source/简历/index.md","hash":"cfdf819a316173b8bb0c8b83eb98e7e383929771","modified":1673110355143},{"_id":"themes/matery/languages/zh-CN.yml","hash":"4fd8aff7506cd282b3735a48bc2d77a6b3ea3e7e","modified":1668758301566},{"_id":"themes/matery/layout/404.ejs","hash":"40c4af57aef2b77611042782e9f3b395f217408f","modified":1668758301567},{"_id":"themes/matery/layout/Resume.ejs","hash":"7ada5f232491dfc36fb649ec5615691d2595eabf","modified":1673668280446},{"_id":"themes/matery/layout/about.ejs","hash":"967ab282def71cd6beff5f5efee8ee0125b7eccf","modified":1673099128285},{"_id":"themes/matery/layout/categories.ejs","hash":"8e54665cc25d7c333da7d9f312987190be6215da","modified":1668758301583},{"_id":"themes/matery/layout/category.ejs","hash":"8fa32a94aa3ba36d788e8f8f5906074e391f1739","modified":1668758301583},{"_id":"themes/matery/layout/archive.ejs","hash":"b09487edc56298e20e8d0c29b9b1131f3eb28fd2","modified":1668758301582},{"_id":"themes/matery/layout/contact.ejs","hash":"7b0f365624f9fdc2fe242930c8de62535c00ae3f","modified":1668758301583},{"_id":"themes/matery/layout/layout.ejs","hash":"79c2726052ccf3fec1c140dd592b60bc481227e8","modified":1668758301584},{"_id":"themes/matery/layout/friends.ejs","hash":"16daffeb0a4be0b6cad42b5e12322c11bdadb387","modified":1668758301583},{"_id":"themes/matery/layout/post.ejs","hash":"f9662a96d0f497a3b2731472b8ad871c7cbdf13a","modified":1668758301584},{"_id":"themes/matery/layout/index.ejs","hash":"d5f5528be590c4d22fc650a6153ec63fcd4f80dc","modified":1668758301583},{"_id":"themes/matery/layout/tag.ejs","hash":"b4ec6952112384961061c923847f19c5afba8d7a","modified":1668758301584},{"_id":"themes/matery/layout/tags.ejs","hash":"cf9517aa6a0111355121f44615d6923e312283c7","modified":1668758301584},{"_id":"themes/matery/layout/简历.ejs","hash":"d546b83bbc2e307c2025f6a22c3902f503ee4ccc","modified":1673099858373},{"_id":"source/_posts/consensus/Distributed_system_CAP-iteblog-ac864baa-9770-40b5-aaf0-432e011fafc6.png","hash":"b5e165bad555ee5869dea2217b9e68e7d5a53878","modified":1668758301455},{"_id":"source/_posts/consensus/Untitled-9ad779df-cde7-402f-8ca0-31cf1807e0e7.png","hash":"90d09b7506189145d63f89f4012fa3021250fb77","modified":1668758301481},{"_id":"source/_posts/暮秋入冬琐语/1.jpg","hash":"34329962b9a75e6a2f61c4861a1df16b393c1598","modified":1668758301555},{"_id":"themes/matery/layout/_partial/back-top.ejs","hash":"8c91d2088c9bb323246b054d4940bde6cead6828","modified":1668758301567},{"_id":"themes/matery/layout/_partial/bg-cover-content.ejs","hash":"41c7ac0d28e52d993e57cb160de8616da0035643","modified":1668758301568},{"_id":"themes/matery/layout/_partial/bg-cover.ejs","hash":"02191109712f61c0e487b8f0b8466597181a9004","modified":1668758301568},{"_id":"themes/matery/layout/_partial/disqus.ejs","hash":"a0f53d1a9b579d52e52ccad8c6e330bf3b89547e","modified":1668758301568},{"_id":"themes/matery/layout/_partial/gitalk.ejs","hash":"c07893e507971db87a3d3509cbd1c0440ab1b691","modified":1668758301569},{"_id":"themes/matery/layout/_partial/github-link.ejs","hash":"3aeb581bd78ab8e15b858e4c44c03bcf92f20b9e","modified":1668758301569},{"_id":"themes/matery/layout/_partial/footer.ejs","hash":"c850297b3a047500dabe62bc0a6194bd7238343a","modified":1668758301569},{"_id":"themes/matery/layout/_partial/gitment.ejs","hash":"0abfb51dc80ad063fb2118bee28de6bb8d99ed4e","modified":1668758301570},{"_id":"themes/matery/layout/_partial/google-analytics.ejs","hash":"5f4992205617da5f8cc5863c62b5ec46e414e2fb","modified":1668758301570},{"_id":"themes/matery/layout/_partial/header.ejs","hash":"e253c813b3ee5ed924700a95133741802e58adc5","modified":1668758301571},{"_id":"themes/matery/layout/_partial/head.ejs","hash":"10503529d5e01c2edc0657a350c7c1c2a6b2728b","modified":1668758301570},{"_id":"themes/matery/layout/_partial/livere.ejs","hash":"9c3401b42ea7f26410a5593bae93ada7e57b43be","modified":1668758301572},{"_id":"themes/matery/layout/_partial/mobile-nav.ejs","hash":"c0d37eaaa0ec59a7dabccccbec6b0f6562c9c92e","modified":1668758301572},{"_id":"themes/matery/layout/_partial/index-cover.ejs","hash":"294e51ad32426fb84da8daaee7c2155071dbd6b1","modified":1668758301572},{"_id":"themes/matery/layout/_partial/navigation.ejs","hash":"33aa62639015661cda3650f5c96ee38975bf1189","modified":1668758301573},{"_id":"themes/matery/layout/_partial/paging.ejs","hash":"68a24cad2b2049c4dc3a250aa30bf4256f9e50cb","modified":1668758301573},{"_id":"themes/matery/layout/_partial/post-cover.ejs","hash":"8f90dba37cb824a037fe86f6b60b73056673cee0","modified":1668758301574},{"_id":"themes/matery/layout/_partial/post-statis.ejs","hash":"2b2fe8e8e94e65c52a4dbd454168e9b9df6baf10","modified":1668758301575},{"_id":"themes/matery/layout/_partial/post-detail-toc.ejs","hash":"d4114c22126704cc1754d6d28cb00aec020b428b","modified":1668758301574},{"_id":"themes/matery/layout/_partial/post-detail.ejs","hash":"80991b987adc765fff991e0d352920cf9e009c19","modified":1668758301574},{"_id":"themes/matery/layout/_partial/reward.ejs","hash":"3dff4f6a73973b0b32f40604244255f3c2a5bb78","modified":1668758301576},{"_id":"themes/matery/layout/_partial/prev-next.ejs","hash":"078cee6adc13ab4a88845d694454ac5dff77ee27","modified":1668758301575},{"_id":"themes/matery/layout/_partial/search.ejs","hash":"942609b9240d5c8c09b24562fc8fb31eabe1cae4","modified":1668758301577},{"_id":"themes/matery/layout/_partial/reprint-statement.ejs","hash":"3d61d4acde8d27a63072145130d2661df8c05df7","modified":1668758301576},{"_id":"themes/matery/layout/_partial/share.ejs","hash":"34f8e4250bb66012026aa50686a7c89a0414ca1b","modified":1668758301577},{"_id":"themes/matery/layout/_partial/social-link.ejs","hash":"e53f4c9cf677c08dd6d7132caf78b3fe433bda00","modified":1668758301577},{"_id":"themes/matery/layout/_widget/category-cloud.ejs","hash":"a5a10d6fa66a389d0253d7a52e0a646af6e8e9be","modified":1668758301578},{"_id":"themes/matery/layout/_partial/valine.ejs","hash":"6ce8a347fdb40b8ae78f924ef6b9f972f2a101a5","modified":1668758301578},{"_id":"themes/matery/layout/_widget/category-radar.ejs","hash":"f5561dd7d53d68897a33090bf677719213459b19","modified":1668758301578},{"_id":"themes/matery/layout/_widget/dream.ejs","hash":"684450f0b42f89ab70370c5248b34e55b7adf6fc","modified":1668758301579},{"_id":"themes/matery/layout/_widget/music.ejs","hash":"8eafddbd73fed80e85c66d49837c1a241b087258","modified":1668758301579},{"_id":"themes/matery/layout/_widget/my-gallery.ejs","hash":"2897c8414f4a37ccebdf0a7fe12d929cd29a728f","modified":1673109239531},{"_id":"themes/matery/layout/_widget/my-projects.ejs","hash":"b9bf70ec5d97b0e14bb1b4f60f92db7680be5949","modified":1668758301580},{"_id":"themes/matery/layout/_widget/my-skills.ejs","hash":"bb8609e8739c7625e5ebfc1998acfac259386273","modified":1668758301580},{"_id":"themes/matery/layout/_widget/post-calendar.ejs","hash":"0b0a3eb6af29bf0d55d535958c44b01c0f18d10d","modified":1668758301580},{"_id":"themes/matery/layout/_widget/tag-cloud.ejs","hash":"a3725f0e3a405acb595b04630a27765b537fb580","modified":1668758301581},{"_id":"themes/matery/layout/_widget/post-charts.ejs","hash":"af0604623db37ef800bb7ad48028d18d99efbbc3","modified":1668758301581},{"_id":"themes/matery/layout/_widget/recommend.ejs","hash":"72ee5ed55e68101a9c560788659674c48e15f568","modified":1668758301581},{"_id":"themes/matery/layout/_widget/tag-wordcloud.ejs","hash":"3a991d7292e0cf98e0eb7d899d0aba5a3ad8cf03","modified":1668758301582},{"_id":"themes/matery/layout/_widget/video.ejs","hash":"bda810cc135b52f834f1c1ccf52defccacace714","modified":1668758301582},{"_id":"themes/matery/source/css/gitment.css","hash":"2bd15cc17dca35ac3ecc0acf167a23a1dd362acd","modified":1668758301585},{"_id":"themes/matery/source/css/my.css","hash":"226252d852f8bdb63e49c99447336a8c071d8ec0","modified":1673668292749},{"_id":"themes/matery/source/css/my-gitalk.css","hash":"eeda46a83d0db1cc239a9cd27d544faf663f9883","modified":1668758301585},{"_id":"themes/matery/source/css/matery.css","hash":"bdf8b434092b69ed16c97c3c78db578c578effd7","modified":1668758301585},{"_id":"themes/matery/source/font/OFL.txt","hash":"e4575441fb9b826e243d7a76622686d7923835cb","modified":1668758302883},{"_id":"themes/matery/source/js/matery.js","hash":"92f07106944f5ef7cd72e84bb3534513d00eebe1","modified":1668758303146},{"_id":"themes/matery/source/js/search.js","hash":"499e11786efbb04815b54a1de317cc8606a37555","modified":1668758303146},{"_id":"themes/matery/source/font/Metropolis-Medium.ttf","hash":"b902ec679173cb2e46bc077ca50897d4106df116","modified":1641461695249},{"_id":"themes/matery/source/medias/logo.png","hash":"301b27d35ea9e56f4eebff4418b825395c7f514f","modified":1668758303410},{"_id":"source/_posts/consensus/Distributed_system_Consistency_model-iteblog-392cde62-0df4-41ab-a200-8699a871dd03.jpg","hash":"b680e31d3efe5ea885098805128166c0624f75c8","modified":1668758301456},{"_id":"source/_posts/consensus/Untitled-4a4eaa95-1ce8-4bbd-89c9-700ad82641db.png","hash":"0b826650dc1c91122ef76a68234d5d032298d440","modified":1668758301476},{"_id":"source/_posts/consensus/Untitled-de737321-ffd8-4e8d-b3f7-3d5483db237e.png","hash":"0ae9ffd6e3d925dedefd13b4a50a1d7945ed24e0","modified":1668758301544},{"_id":"source/_posts/暮秋入冬琐语/2.jpg","hash":"862814cbe78db293aba322121b276c6d083b833c","modified":1668758301556},{"_id":"themes/matery/source/favicon.png","hash":"4731eda533b6ad2799f1ea30c0acc12d1b5b3cb2","modified":1668758301587},{"_id":"source/_posts/consensus/Untitled-43522eca-aed6-4148-bc7c-499ba25e2284.png","hash":"2e681a6ac14990fc1ef212e6d1e024cee8d3c382","modified":1668758301475},{"_id":"source/_posts/consensus/Untitled-b4f0cf74-00d2-4eba-968f-619a4ed257da.png","hash":"fe568c9084515a66c41d8095ba8059e58d0fa909","modified":1668758301535},{"_id":"source/_posts/暮秋入冬琐语/3.jpg","hash":"d5815a13619806513934da94c09ce324be399d21","modified":1668758301557},{"_id":"themes/matery/source/libs/animate/animate.min.css","hash":"97afa151569f046b2e01f27c1871646e9cd87caf","modified":1668758303147},{"_id":"themes/matery/source/font/GT-Super-Text-Book.otf","hash":"123f698480dfa52209f3bf6a205fe900e40f2f52","modified":1673433958827},{"_id":"themes/matery/source/libs/aos/aos.css","hash":"191a3705a8f63e589a50a0ff2f2c5559f1a1b6b2","modified":1668758303147},{"_id":"themes/matery/source/libs/aos/aos.js","hash":"02bfb40b0c4b6e9b0b4081218357145cbb327d74","modified":1668758303148},{"_id":"themes/matery/source/libs/aplayer/APlayer.min.css","hash":"07372a2ba507388d0fed166d761b1c2c2a659dce","modified":1668758303148},{"_id":"themes/matery/source/libs/dplayer/DPlayer.min.css","hash":"f7d19655f873b813ffba5d1a17145c91f82631b8","modified":1668758303157},{"_id":"themes/matery/source/libs/cryptojs/crypto-js.min.js","hash":"5989527a378b55011a59522f41eeb3981518325c","modified":1668758303156},{"_id":"themes/matery/source/libs/gitment/gitment-default.css","hash":"2903c59ee06b965bef32e937bd69f5b0b2190717","modified":1668758303163},{"_id":"themes/matery/source/libs/jqcloud/jqcloud-1.0.4.min.js","hash":"257eaae3020599e4939f50d5008a743827f25b8c","modified":1668758303165},{"_id":"themes/matery/source/libs/jqcloud/jqcloud.css","hash":"20d9f11a19d95c70e27cb922e0d6dccbec4eae89","modified":1668758303165},{"_id":"themes/matery/source/libs/gitalk/gitalk.css","hash":"3aac1db83b0135c521187254ff302d125cc30706","modified":1668758303161},{"_id":"themes/matery/source/font/gotham-rounded-book.otf","hash":"eef7adef9ae4cd0aef444d9e448608e3f4d55dbd","modified":1668758302896},{"_id":"themes/matery/source/libs/others/busuanzi.pure.mini.js","hash":"6e41f31100ae7eb3a6f23f2c168f6dd56e7f7a9a","modified":1668758303175},{"_id":"themes/matery/source/libs/others/clicklove.js","hash":"6a39b8c683ba5dcd92f70c6ab45d1cfac3213e8e","modified":1668758303175},{"_id":"themes/matery/source/libs/others/fireworks.js","hash":"53981959bc6def4a85bbbb41b07e4b1474a2124d","modified":1668758303176},{"_id":"themes/matery/source/libs/others/explosion.min.js","hash":"417b68e2cf2c6de2119c57626f4412105a8457f5","modified":1668758303175},{"_id":"themes/matery/source/libs/others/snow.js","hash":"7f3b1ad2f64d4473210a2c3218893649c73c980e","modified":1668758303176},{"_id":"themes/matery/source/libs/others/text.js","hash":"1791782cde0d1e4197f2ed58ecb7dd6aefddd169","modified":1668758303176},{"_id":"themes/matery/source/libs/scrollprogress/scrollProgress.min.js","hash":"777ffe5d07e85a14fbe97d846f45ffc0087251cc","modified":1668758303177},{"_id":"themes/matery/source/libs/masonry/masonry.pkgd.min.js","hash":"ff940b4ea68368ca0e4d5560cbb79fb147dfc3c5","modified":1668758303172},{"_id":"themes/matery/source/libs/tocbot/tocbot.css","hash":"15601837bf8557c2fd111e4450ed4c8495fd11a0","modified":1668758303179},{"_id":"themes/matery/source/libs/tocbot/tocbot.min.js","hash":"5ec27317f0270b8cf6b884c6f12025700b9a565c","modified":1668758303180},{"_id":"themes/matery/source/medias/avatars/babyq.png","hash":"be5432588003e5a52c02e690622eec72b5f7346c","modified":1668758303185},{"_id":"themes/matery/source/medias/avatars/cww97.jpg","hash":"6af987cafc55d8d031534dd5e0f722fff19f70ec","modified":1668758303185},{"_id":"themes/matery/source/medias/avatars/fun4go.png","hash":"0f4333973a972a629cfbabf601bc7c192b65376c","modified":1668758303186},{"_id":"themes/matery/source/medias/avatars/huaji.jpg","hash":"86be7eed2a491455ccfe3e7da46366ff477765ca","modified":1668758303187},{"_id":"themes/matery/source/medias/avatars/hael.jpg","hash":"e66ccedab38bb2e8fc45fac024e234ab8e7b9d54","modified":1668758303187},{"_id":"themes/matery/source/medias/avatars/hzwer.jpg","hash":"53a66bb5e65d2abd5b7412edf094c1e0b1094492","modified":1668758303187},{"_id":"themes/matery/source/medias/avatars/ids2.jpg","hash":"2c8d3ac6ab5ac6196bac83766fde975daca91c32","modified":1668758303188},{"_id":"themes/matery/source/medias/avatars/ldy.jpg","hash":"906ef214d1f2fe52a663738340ad5623f826bd82","modified":1668758303189},{"_id":"themes/matery/source/medias/avatars/lijiaqian.png","hash":"9d96b3838acfae9a23b6e290fcfafceff0419c63","modified":1668758303190},{"_id":"themes/matery/source/medias/avatars/kewlgrl.jpg","hash":"3af0fd1029a1511bb3c0e90871e41b35e714b01f","modified":1668758303189},{"_id":"themes/matery/source/medias/avatars/liyucheng.jpg","hash":"12055a27fa667c87d2319475968056e1a8ad0f08","modified":1668758303191},{"_id":"themes/matery/source/medias/avatars/liyangzone.jpg","hash":"febab557e4c0d859ab4cc14b57d8106f5e3fccfb","modified":1668758303190},{"_id":"themes/matery/source/medias/avatars/michael.jpg","hash":"331a2ab20c299196f5a3089b8445fc8f55346cb6","modified":1668758303193},{"_id":"themes/matery/source/medias/avatars/mpy634.png","hash":"30f88e09c02b37c2dc684d4ee3237e327bb23f8b","modified":1668758303195},{"_id":"themes/matery/source/medias/avatars/myzhihu.png","hash":"245bf683033c88588e6b0e74bde5398866731652","modified":1668758303196},{"_id":"themes/matery/source/medias/avatars/qiqiang.jpg","hash":"081459866f922d9558a88cd4d7155d91fa730322","modified":1668758303197},{"_id":"themes/matery/source/medias/avatars/mouse.jpg","hash":"2eae273885b9859150a1f98f74b3df12ca9a207c","modified":1668758303195},{"_id":"themes/matery/source/medias/avatars/sunchangzhi.jpg","hash":"bbe2a15fd474ab62dbd14fea72deb1113a4fb005","modified":1668758303198},{"_id":"themes/matery/source/medias/avatars/spacesac.png","hash":"ff1bdb058f1f0499312da1a082ba97d78590db1a","modified":1668758303197},{"_id":"themes/matery/source/medias/avatars/taowei.jpg","hash":"e58b03b70656aa7a27238be38dac3896d9d16f10","modified":1668758303198},{"_id":"themes/matery/source/medias/avatars/tencent.png","hash":"618e1eb68e76021ecab5c0ec0ecd5308ec3d2452","modified":1668758303199},{"_id":"themes/matery/source/medias/avatars/zhaokangzhe.jpg","hash":"c8242bd13f08a9ddb97e26f216bc729b12ed9058","modified":1668758303201},{"_id":"themes/matery/source/medias/pic/1.jpg","hash":"7b6dc150964de7ee4b32919ea0da671d932f8956","modified":1668758303414},{"_id":"themes/matery/source/medias/reward/wechat.png","hash":"61eb27bc4ec65f4f116d34740903fb5af75bf561","modified":1668758303426},{"_id":"themes/matery/source/libs/aplayer/APlayer.min.js","hash":"22caa28ff6b41a16ff40f15d38f1739e22359478","modified":1668758303149},{"_id":"themes/matery/source/libs/dplayer/DPlayer.min.js","hash":"c3bad7b265574fab0ae4d45867422ea1cb9d6599","modified":1668758303157},{"_id":"themes/matery/source/libs/gitment/gitment.js","hash":"28c02c45ce568e084cd1041dc493f83f9c6c88c6","modified":1668758303164},{"_id":"themes/matery/source/libs/jquery/jquery-2.2.0.min.js","hash":"5d7e5bbfa540f0e53bd599e4305e1a4e815b5dd1","modified":1668758303166},{"_id":"themes/matery/source/libs/valine/Valine.min.js","hash":"4e34802ccbb59f1daa58a62241ff57f923e50600","modified":1668758303181},{"_id":"themes/matery/source/medias/avatars/duyupei.jpg","hash":"3c02ed4cf57dc37e4f4b8314bf5094833a854cb0","modified":1668758303186},{"_id":"themes/matery/source/medias/avatars/antnlp.ico","hash":"29475f350b989331cebd702a315f020917d06ed8","modified":1668758303183},{"_id":"themes/matery/source/medias/avatars/gsy.jpg","hash":"6a175e2ba56a2280d40a2e654b559be41c3a0a48","modified":1668758303186},{"_id":"themes/matery/source/medias/avatars/milyyy.jpg","hash":"ac2826d9c28346efeb967df01465a2c74d9041fe","modified":1668758303194},{"_id":"themes/matery/source/medias/avatars/mizunashi.png","hash":"5fc300701d3b4250a307ed70e3a3aa0d5395c808","modified":1668758303195},{"_id":"themes/matery/source/medias/avatars/qiandongwei.jpg","hash":"6873551596a4513d01898ad866c4073c68270c57","modified":1668758303196},{"_id":"themes/matery/source/medias/avatars/xuzhongyou.jpg","hash":"1db4dfaf23cf250f222a398326562d4170d3aaa1","modified":1668758303199},{"_id":"themes/matery/source/medias/avatars/zhangting.jpg","hash":"10ee25ae3531f046a8bd3696c1cc8a16f0f25e1b","modified":1668758303200},{"_id":"themes/matery/source/medias/avatars/zzw.jpg","hash":"5d385b5732644b07b937a4919abc83cb95e14513","modified":1668758303201},{"_id":"themes/matery/source/medias/reward/alipay.jpg","hash":"9bade255a1918cfb3c3bcefbbbc8f163bf2e19e3","modified":1668758303425},{"_id":"source/_posts/consensus/Untitled-75e05e42-d661-4446-9120-ae13749b1535.png","hash":"73eec1fa4b7507fa79c9090f9dbceb3791964db3","modified":1668758301480},{"_id":"source/_posts/consensus/Untitled-a6750265-7683-4067-8d61-206f696acc69.png","hash":"dfe3c4b0739ee9d8d7bc7fb4d4aea4d8e67d9749","modified":1668758301525},{"_id":"themes/matery/source/libs/awesome/css/font-awesome.min.css","hash":"512c7d79033e3028a9be61b540cf1a6870c896f8","modified":1668758303149},{"_id":"themes/matery/source/libs/lightGallery/fonts/lg.eot","hash":"54caf05a81e33d7bf04f2e420736ce6f1de5f936","modified":1668758303168},{"_id":"themes/matery/source/libs/lightGallery/fonts/lg.ttf","hash":"f6421c0c397311ae09f9257aa58bcd5e9720f493","modified":1668758303169},{"_id":"themes/matery/source/libs/lightGallery/fonts/lg.woff","hash":"3048de344dd5cad4624e0127e58eaae4b576f574","modified":1668758303169},{"_id":"themes/matery/source/libs/lightGallery/fonts/lg.svg","hash":"9a732790adc004b22022cc60fd5f77ec4c8e3e5a","modified":1668758303168},{"_id":"themes/matery/source/libs/lightGallery/css/lightgallery.min.css","hash":"1b7227237f9785c66062a4811508916518e4132c","modified":1668758303167},{"_id":"themes/matery/source/libs/lightGallery/img/loading.gif","hash":"15a76af2739482d8de7354abc6d8dc4fca8d145e","modified":1668758303170},{"_id":"themes/matery/source/libs/lightGallery/img/video-play.png","hash":"fbfdbe06aebf7d0c00da175a4810cf888d128f11","modified":1668758303170},{"_id":"themes/matery/source/libs/lightGallery/img/vimeo-play.png","hash":"1142b47de219dddfba2e712cd3189dec0c8b7bee","modified":1668758303170},{"_id":"themes/matery/source/libs/lightGallery/img/youtube-play.png","hash":"39150b45ec5fc03155b7ebeaa44f1829281788e2","modified":1668758303171},{"_id":"themes/matery/source/libs/gitalk/gitalk.min.js","hash":"28bdb33c9eb609c2f30d431df1a4cf8ca70bf841","modified":1668758303162},{"_id":"themes/matery/source/libs/share/css/share.min.css","hash":"8a778a86f3ce9a042df6be63a9f1039631e351a5","modified":1668758303177},{"_id":"themes/matery/source/libs/share/js/jquery.share.min.js","hash":"16ce82901ca0e302cf47a35fb10f59009a5e7eb9","modified":1668758303179},{"_id":"themes/matery/source/libs/share/fonts/iconfont.eot","hash":"00ff749c8e202401190cc98d56087cdda716abe4","modified":1668758303178},{"_id":"themes/matery/source/libs/share/fonts/iconfont.svg","hash":"f0a1b849868a6bf351ff98dc3924a4e7254eb88b","modified":1668758303178},{"_id":"themes/matery/source/libs/share/js/social-share.min.js","hash":"4df722bafde2c5d8faaace0d1f894798385a8793","modified":1668758303179},{"_id":"themes/matery/source/libs/share/fonts/iconfont.ttf","hash":"afd898f59d363887418669520b24d175f966a083","modified":1668758303178},{"_id":"themes/matery/source/libs/share/fonts/iconfont.woff","hash":"2e3fce1dcfbd6e2114e7bfbeaf72d3c62e15a1bd","modified":1668758303178},{"_id":"themes/matery/source/libs/materialize/materialize.min.css","hash":"4d46df5f22cbc24eefa76228c7ee308dc3585594","modified":1668758303173},{"_id":"themes/matery/source/libs/materialize/materialize.min.js","hash":"c8b4c65651921d888cf5f27430dfe2ad190d35bf","modified":1668758303174},{"_id":"themes/matery/source/libs/valine/av-min.js","hash":"2577e72b52b736d99649f9e95be8976d58563333","modified":1668758303182},{"_id":"themes/matery/source/medias/avatars/0xbird.png","hash":"f9d597dfcb49e1e2be06138b24028291f5638610","modified":1668758303183},{"_id":"themes/matery/source/medias/avatars/mashiro.jpg","hash":"250e911c16eeb6acb1e6214ad3e6a3d762850a8e","modified":1668758303193},{"_id":"themes/matery/source/medias/avatars/lyn-draw.jpg","hash":"837d5d5df4dcb086d2da114d0d85084b4ec18768","modified":1668758303192},{"_id":"themes/matery/source/medias/avatars/qianqian.png","hash":"fed254c4e7eb58ee22d647acb83f1d08f4508f8f","modified":1668758303197},{"_id":"themes/matery/source/medias/music/avatars/tiantangdemogui.jpg","hash":"f005578ddb4d3d731838db89a708f39f18d50e60","modified":1668758303411},{"_id":"themes/matery/source/medias/music/avatars/yequ.jpg","hash":"103beb9ab33434b434fa37a30aecdb29db633024","modified":1668758303412},{"_id":"themes/matery/source/medias/music/avatars/yiluxiangbei.jpg","hash":"01b12e3aca7385a88412c12539e1a608a78896fa","modified":1668758303412},{"_id":"source/_posts/consensus/Untitled-9d3289bb-0f85-43cb-913e-5c3690982bf5.png","hash":"f1fb11a62f569ad75f216ce43ce5fd29d6e90ed8","modified":1668758301484},{"_id":"themes/matery/source/libs/awesome/fonts/fontawesome-webfont.woff","hash":"28b782240b3e76db824e12c02754a9731a167527","modified":1668758303155},{"_id":"themes/matery/source/libs/awesome/fonts/fontawesome-webfont.woff2","hash":"d6f48cba7d076fb6f2fd6ba993a75b9dc1ecbf0c","modified":1668758303156},{"_id":"themes/matery/source/libs/lightGallery/js/lightgallery-all.min.js","hash":"9f5ef4bc8a0a3c746ca4f3c3e6d64493b1a977d8","modified":1668758303172},{"_id":"themes/matery/source/medias/avatars/avatar.jpg","hash":"4731eda533b6ad2799f1ea30c0acc12d1b5b3cb2","modified":1668758303184},{"_id":"themes/matery/source/medias/avatars/jitao.jpg","hash":"5934b9baccebccbc2be2ead5d84ad32dd41f9559","modified":1668758303189},{"_id":"themes/matery/source/medias/avatars/lzh.png","hash":"8ffcbf19d6b38b891dbe408d9a4e9513b56f247e","modified":1668758303192},{"_id":"themes/matery/source/libs/awesome/fonts/fontawesome-webfont.ttf","hash":"13b1eab65a983c7a73bc7997c479d66943f7c6cb","modified":1668758303155},{"_id":"themes/matery/source/medias/avatars/jingjing.jpg","hash":"bfcab0139edb2509de984cb0a9b156879c355158","modified":1668758303188},{"_id":"source/_posts/consensus/Untitled-e36f718a-403c-40fc-adfe-423e7d7e6836.png","hash":"4750c9b7c9f8d4bfbad306c247926ef1d23b99f4","modified":1668758301549},{"_id":"source/_posts/songcisishou/1.jpg","hash":"7d730160ce1461aef75ba74786f80b6e01839e43","modified":1668758301554},{"_id":"themes/matery/source/libs/awesome/fonts/fontawesome-webfont.eot","hash":"d980c2ce873dc43af460d4d572d441304499f400","modified":1668758303152},{"_id":"themes/matery/source/libs/awesome/fonts/FontAwesome.otf","hash":"048707bc52ac4b6563aaa383bfe8660a0ddc908c","modified":1668758303150},{"_id":"source/_posts/consensus/Untitled-12f560d2-d186-4995-8545-bad7909240b7.png","hash":"056361b8985a287e441dcea1d2c1ad461cb9c912","modified":1668758301466},{"_id":"source/_posts/consensus/Untitled-2a2f06c4-1305-44ec-98ea-94a532d36d56.png","hash":"0f818e96f221ebcd27c7e4c29857fb441a901232","modified":1668758301472},{"_id":"source/_posts/consensus/Untitled-03b14664-4015-4295-9be4-ed16042a68b7.png","hash":"4d2dcd1586340167593ccd8744ac90e9a6871043","modified":1668758301460},{"_id":"themes/matery/source/medias/music/avatars/daoshu.jpg","hash":"eee120fdf5ccbe86aa7d51826c4c773e76e6357f","modified":1668758303411},{"_id":"themes/matery/source/medias/banner/7.jpg","hash":"d3b576105cc6a5b9610a5c958e78709b161e531c","modified":1668758303323},{"_id":"themes/matery/source/medias/banner/6.jpg","hash":"f37e543f6ff9d88bf9a82b0da8cb14f8f1f67e1b","modified":1668758303318},{"_id":"themes/matery/source/medias/avatars/zhangyi.jpg","hash":"c9130036aac9a7ac8d62e33550a9d64896cdc364","modified":1668758303200},{"_id":"themes/matery/source/medias/featureimages/10.jpg","hash":"a5b8ac2f7703c81c99e1ddb822d46c55dfe1f140","modified":1668758303343},{"_id":"themes/matery/source/medias/featureimages/6.jpg","hash":"f37e543f6ff9d88bf9a82b0da8cb14f8f1f67e1b","modified":1668758303396},{"_id":"themes/matery/source/medias/featureimages/7.jpg","hash":"d3b576105cc6a5b9610a5c958e78709b161e531c","modified":1668758303399},{"_id":"themes/matery/source/medias/banner/10.jpg","hash":"a5b8ac2f7703c81c99e1ddb822d46c55dfe1f140","modified":1668758303208},{"_id":"themes/matery/source/font/Baloo2-VariableFont_wght.ttf","hash":"5173aa48145d1395c4127eb10e6df0edc730cd33","modified":1453219200000},{"_id":"themes/matery/source/libs/awesome/fonts/fontawesome-webfont.svg","hash":"98a8aa5cf7d62c2eff5f07ede8d844b874ef06ed","modified":1668758303154},{"_id":"themes/matery/source/medias/banner/1.jpg","hash":"03bf2578cdf00fb1e951ef189062c5f3e2d6b371","modified":1668758303206},{"_id":"themes/matery/source/medias/banner/5.jpg","hash":"03bf2578cdf00fb1e951ef189062c5f3e2d6b371","modified":1668758303313},{"_id":"themes/matery/source/medias/featureimages/1.jpg","hash":"03bf2578cdf00fb1e951ef189062c5f3e2d6b371","modified":1668758303342},{"_id":"themes/matery/source/medias/featureimages/5.jpg","hash":"03bf2578cdf00fb1e951ef189062c5f3e2d6b371","modified":1668758303393},{"_id":"themes/matery/source/libs/echarts/echarts.min.js","hash":"9496f386a0da4601cad22c479cc5543913a4d67f","modified":1668758303161},{"_id":"themes/matery/source/medias/banner/9.jpg","hash":"f147d6e4e674910d1cf53841cd69edd92a5f8384","modified":1668758303339},{"_id":"themes/matery/source/medias/featureimages/9.jpg","hash":"f147d6e4e674910d1cf53841cd69edd92a5f8384","modified":1668758303409},{"_id":"themes/matery/source/medias/pic/2.jpg","hash":"cc627273581edb39d6d8eed689a06c0aa6ef96c8","modified":1668758303424},{"_id":"themes/matery/source/medias/banner/12.jpg","hash":"0389e7e88060591d2d9e623989791f1ae9a2b5df","modified":1668758303246},{"_id":"themes/matery/source/medias/featureimages/12.jpg","hash":"0389e7e88060591d2d9e623989791f1ae9a2b5df","modified":1668758303358},{"_id":"themes/matery/source/medias/banner/4.jpg","hash":"fa77b51a6b427148e325155d269ec6bcb6577214","modified":1668758303309},{"_id":"themes/matery/source/medias/featureimages/4.jpg","hash":"fa77b51a6b427148e325155d269ec6bcb6577214","modified":1668758303390},{"_id":"themes/matery/source/medias/banner/3.jpg","hash":"173e7f40e44b2f3f8f0cecac2f0449b150d66eb5","modified":1668758303294},{"_id":"themes/matery/source/medias/featureimages/3.jpg","hash":"173e7f40e44b2f3f8f0cecac2f0449b150d66eb5","modified":1668758303385},{"_id":"themes/matery/source/medias/banner/2.jpg","hash":"2b66e0b008146b54c115a25570ad431578b49f45","modified":1668758303263},{"_id":"themes/matery/source/medias/featureimages/8.jpg","hash":"2b66e0b008146b54c115a25570ad431578b49f45","modified":1668758303404},{"_id":"themes/matery/source/medias/banner/8.jpg","hash":"2b66e0b008146b54c115a25570ad431578b49f45","modified":1668758303330},{"_id":"themes/matery/source/medias/featureimages/2.jpg","hash":"2b66e0b008146b54c115a25570ad431578b49f45","modified":1668758303367},{"_id":"source/_posts/consensus/Untitled-a17735d5-49dd-4565-8bbf-271c080e18a5.png","hash":"098f8bf2293974c4107f949ec8d8e17d0c30b25f","modified":1668758301515},{"_id":"themes/matery/source/medias/banner/11.jpg","hash":"1f1f47c8c94680c14daa08fdb3e1b2f5eb139bca","modified":1668758303230},{"_id":"themes/matery/source/medias/featureimages/11.jpg","hash":"1f1f47c8c94680c14daa08fdb3e1b2f5eb139bca","modified":1668758303349},{"_id":"themes/matery/source/medias/featureimages/psc5.jpeg","hash":"77f9e6e4fc798cb137ba4cad3db19a31a69f5e9b","modified":1673107025000},{"_id":"themes/matery/source/font/LXGWWenKai-Regular.ttf","hash":"ecece368b2cfe93b3138a1f458f9b7f43dedaa30","modified":1664261987000},{"_id":"public/baidu_urls.txt","hash":"2f916494690961d1b801a5567dae85b51e7e8ea0","modified":1673669622297},{"_id":"public/baidusitemap.xml","hash":"f03fe5b7d077771bb91c0599f7bbb4a0e7c0ab08","modified":1673669622298},{"_id":"public/atom.xml","hash":"9abc4a1a20b9ea35b13ddf16214b6a09c6b970d5","modified":1673669622454},{"_id":"public/search.xml","hash":"a5e4026fffb593c83f2a526d24cf69d19b46195a","modified":1673669622499},{"_id":"public/sitemap.xml","hash":"7fa0a08801acb3c620f77b67229bb76398a4b182","modified":1673669622499},{"_id":"public/404.html","hash":"81cd1f50c0f472c4edceb550b609c0f0127c9018","modified":1673669622518},{"_id":"public/Resume/index.html","hash":"ba44a651ece967029ca53abe936e74841c79a4ee","modified":1673669622519},{"_id":"public/archives/index.html","hash":"992c05ea61eda0e579776f23f557e5f24368e866","modified":1673669622519},{"_id":"public/about/index.html","hash":"ecb83c1890522c23c0e437a7697ab28f0a7ff540","modified":1673669622519},{"_id":"public/categories/index.html","hash":"1b830ee18e9ce69c2e66849cc6210a1caa7c56b9","modified":1673669622519},{"_id":"public/contact/index.html","hash":"054163604378b5826575cf45634ab554e178ecab","modified":1673669622519},{"_id":"public/friends/index.html","hash":"28a962c23cd01e3f71c056aea3b60071aedaf9b0","modified":1673669622519},{"_id":"public/tags/index.html","hash":"443d14f5da3b16b895c3a2daacdb4603c407a8aa","modified":1673669622519},{"_id":"public/简历/index.html","hash":"7065864163cc7a72694138dccdd05087392f7e62","modified":1673669622519},{"_id":"public/2019/11/13/consensus/index.html","hash":"1e78769545ae388cfd7b7ee50c4d269fcbd36c08","modified":1673669622519},{"_id":"public/2019/11/12/songcisishou/index.html","hash":"6ac8b1a732d60965a65caafad20d463de24d5d17","modified":1673669622519},{"_id":"public/2019/11/03/mu-qiu-ru-dong-suo-yu/index.html","hash":"772bb0ca1a6e1e88610d0671af110d70cfd6afa4","modified":1673669622519},{"_id":"public/archives/2019/index.html","hash":"8b2fdfdf92762628ff0d915ab2fa7c91399fe701","modified":1673669622519},{"_id":"public/archives/2019/11/index.html","hash":"b096c67f098ca118e4a41f3cd71bb12c98b555f2","modified":1673669622519},{"_id":"public/categories/诗歌/index.html","hash":"7a9e54b61165e41de7ec45be99fc489974a95ecc","modified":1673669622519},{"_id":"public/categories/散文/index.html","hash":"01229975f63e1c63fe852c4239a300c2ea733bdf","modified":1673669622519},{"_id":"public/categories/技术/index.html","hash":"4b59e9a359f6531659c7716f587076df5c321747","modified":1673669622519},{"_id":"public/index.html","hash":"2e9be319402b68311ea59e194aec9acdec56d69c","modified":1673669622519},{"_id":"public/tags/诗歌/index.html","hash":"fb5c9bc8c501894c247bc0acaa3031d7e14286f8","modified":1673669622520},{"_id":"public/tags/散文/index.html","hash":"b74e556c9bb22dd70bd3305de2ea0a56c87d8867","modified":1673669622520},{"_id":"public/tags/分布式/index.html","hash":"16877d48f4000fe0be35a97b40fe50c6a069e72d","modified":1673669622520},{"_id":"public/tags/CAP/index.html","hash":"d33dbf4aca203dfdfdbb19805f65ed782f640ee1","modified":1673669622520},{"_id":"public/tags/共识/index.html","hash":"74da4b0855c686554b87cd632acb56ccdc84ded2","modified":1673669622520},{"_id":"public/tags/Paxos/index.html","hash":"35c248418e256aaab044f54b8f0581a049228134","modified":1673669622520},{"_id":"public/tags/Raft/index.html","hash":"cf81e7bc55f2028ee1daa79d9f72ae9cea850276","modified":1673669622520},{"_id":"public/tags/ZAB/index.html","hash":"8924e460a85d652613d32814f5784710a3b7d6e2","modified":1673669622520},{"_id":"public/CNAME","hash":"64207402940522edc9298a237def61b761ce8966","modified":1673669622534},{"_id":"public/font/OFL.txt","hash":"e4575441fb9b826e243d7a76622686d7923835cb","modified":1673669622534},{"_id":"public/font/Metropolis-Medium.ttf","hash":"b902ec679173cb2e46bc077ca50897d4106df116","modified":1673669622534},{"_id":"public/medias/logo.png","hash":"301b27d35ea9e56f4eebff4418b825395c7f514f","modified":1673669622534},{"_id":"public/medias/avatars/cww97.jpg","hash":"6af987cafc55d8d031534dd5e0f722fff19f70ec","modified":1673669622534},{"_id":"public/medias/avatars/babyq.png","hash":"be5432588003e5a52c02e690622eec72b5f7346c","modified":1673669622534},{"_id":"public/medias/avatars/fun4go.png","hash":"0f4333973a972a629cfbabf601bc7c192b65376c","modified":1673669622534},{"_id":"public/medias/avatars/huaji.jpg","hash":"86be7eed2a491455ccfe3e7da46366ff477765ca","modified":1673669622534},{"_id":"public/medias/avatars/hael.jpg","hash":"e66ccedab38bb2e8fc45fac024e234ab8e7b9d54","modified":1673669622534},{"_id":"public/medias/avatars/hzwer.jpg","hash":"53a66bb5e65d2abd5b7412edf094c1e0b1094492","modified":1673669622534},{"_id":"public/medias/avatars/ids2.jpg","hash":"2c8d3ac6ab5ac6196bac83766fde975daca91c32","modified":1673669622535},{"_id":"public/medias/avatars/ldy.jpg","hash":"906ef214d1f2fe52a663738340ad5623f826bd82","modified":1673669622535},{"_id":"public/medias/avatars/kewlgrl.jpg","hash":"3af0fd1029a1511bb3c0e90871e41b35e714b01f","modified":1673669622535},{"_id":"public/medias/avatars/lijiaqian.png","hash":"9d96b3838acfae9a23b6e290fcfafceff0419c63","modified":1673669622535},{"_id":"public/medias/avatars/liyucheng.jpg","hash":"12055a27fa667c87d2319475968056e1a8ad0f08","modified":1673669622535},{"_id":"public/medias/avatars/mpy634.png","hash":"30f88e09c02b37c2dc684d4ee3237e327bb23f8b","modified":1673669622535},{"_id":"public/medias/avatars/michael.jpg","hash":"331a2ab20c299196f5a3089b8445fc8f55346cb6","modified":1673669622535},{"_id":"public/medias/avatars/liyangzone.jpg","hash":"febab557e4c0d859ab4cc14b57d8106f5e3fccfb","modified":1673669622535},{"_id":"public/medias/avatars/myzhihu.png","hash":"245bf683033c88588e6b0e74bde5398866731652","modified":1673669622535},{"_id":"public/medias/avatars/qiqiang.jpg","hash":"081459866f922d9558a88cd4d7155d91fa730322","modified":1673669622535},{"_id":"public/medias/avatars/mouse.jpg","hash":"2eae273885b9859150a1f98f74b3df12ca9a207c","modified":1673669622535},{"_id":"public/medias/avatars/sunchangzhi.jpg","hash":"bbe2a15fd474ab62dbd14fea72deb1113a4fb005","modified":1673669622535},{"_id":"public/medias/avatars/spacesac.png","hash":"ff1bdb058f1f0499312da1a082ba97d78590db1a","modified":1673669622535},{"_id":"public/medias/avatars/taowei.jpg","hash":"e58b03b70656aa7a27238be38dac3896d9d16f10","modified":1673669622535},{"_id":"public/medias/avatars/tencent.png","hash":"618e1eb68e76021ecab5c0ec0ecd5308ec3d2452","modified":1673669622535},{"_id":"public/medias/avatars/zhaokangzhe.jpg","hash":"c8242bd13f08a9ddb97e26f216bc729b12ed9058","modified":1673669622535},{"_id":"public/medias/pic/1.jpg","hash":"7b6dc150964de7ee4b32919ea0da671d932f8956","modified":1673669622535},{"_id":"public/medias/reward/wechat.png","hash":"61eb27bc4ec65f4f116d34740903fb5af75bf561","modified":1673669622535},{"_id":"public/libs/lightGallery/fonts/lg.eot","hash":"54caf05a81e33d7bf04f2e420736ce6f1de5f936","modified":1673669622535},{"_id":"public/libs/lightGallery/fonts/lg.woff","hash":"3048de344dd5cad4624e0127e58eaae4b576f574","modified":1673669622535},{"_id":"public/libs/lightGallery/fonts/lg.svg","hash":"9a732790adc004b22022cc60fd5f77ec4c8e3e5a","modified":1673669622535},{"_id":"public/libs/lightGallery/fonts/lg.ttf","hash":"f6421c0c397311ae09f9257aa58bcd5e9720f493","modified":1673669622535},{"_id":"public/libs/lightGallery/img/vimeo-play.png","hash":"1142b47de219dddfba2e712cd3189dec0c8b7bee","modified":1673669622535},{"_id":"public/libs/lightGallery/img/video-play.png","hash":"fbfdbe06aebf7d0c00da175a4810cf888d128f11","modified":1673669622535},{"_id":"public/libs/lightGallery/img/youtube-play.png","hash":"39150b45ec5fc03155b7ebeaa44f1829281788e2","modified":1673669622536},{"_id":"public/libs/lightGallery/img/loading.gif","hash":"15a76af2739482d8de7354abc6d8dc4fca8d145e","modified":1673669622536},{"_id":"public/libs/share/fonts/iconfont.svg","hash":"f0a1b849868a6bf351ff98dc3924a4e7254eb88b","modified":1673669622536},{"_id":"public/libs/share/fonts/iconfont.woff","hash":"2e3fce1dcfbd6e2114e7bfbeaf72d3c62e15a1bd","modified":1673669622536},{"_id":"public/libs/share/fonts/iconfont.ttf","hash":"afd898f59d363887418669520b24d175f966a083","modified":1673669622536},{"_id":"public/medias/music/avatars/tiantangdemogui.jpg","hash":"f005578ddb4d3d731838db89a708f39f18d50e60","modified":1673669622536},{"_id":"public/libs/share/fonts/iconfont.eot","hash":"00ff749c8e202401190cc98d56087cdda716abe4","modified":1673669622536},{"_id":"public/medias/music/avatars/yequ.jpg","hash":"103beb9ab33434b434fa37a30aecdb29db633024","modified":1673669622536},{"_id":"public/medias/music/avatars/yiluxiangbei.jpg","hash":"01b12e3aca7385a88412c12539e1a608a78896fa","modified":1673669622536},{"_id":"public/2019/11/13/consensus/Distributed_system_CAP-iteblog-ac864baa-9770-40b5-aaf0-432e011fafc6.png","hash":"b5e165bad555ee5869dea2217b9e68e7d5a53878","modified":1673669622536},{"_id":"public/2019/11/03/mu-qiu-ru-dong-suo-yu/1.jpg","hash":"34329962b9a75e6a2f61c4861a1df16b393c1598","modified":1673669622536},{"_id":"public/2019/11/13/consensus/Untitled-9ad779df-cde7-402f-8ca0-31cf1807e0e7.png","hash":"90d09b7506189145d63f89f4012fa3021250fb77","modified":1673669622536},{"_id":"public/css/prism-tomorrow.css","hash":"3b99487dfc9b4e51e9105a93743b92a761840e34","modified":1673669622536},{"_id":"public/css/prism-line-numbers.css","hash":"e0db113a99e4a09d2161a539b1652d96e4a22fac","modified":1673669622536},{"_id":"public/medias/avatars/duyupei.jpg","hash":"3c02ed4cf57dc37e4f4b8314bf5094833a854cb0","modified":1673669622547},{"_id":"public/medias/avatars/antnlp.ico","hash":"29475f350b989331cebd702a315f020917d06ed8","modified":1673669622549},{"_id":"public/medias/avatars/gsy.jpg","hash":"6a175e2ba56a2280d40a2e654b559be41c3a0a48","modified":1673669622551},{"_id":"public/medias/avatars/qiandongwei.jpg","hash":"6873551596a4513d01898ad866c4073c68270c57","modified":1673669622552},{"_id":"public/medias/avatars/mizunashi.png","hash":"5fc300701d3b4250a307ed70e3a3aa0d5395c808","modified":1673669622552},{"_id":"public/medias/avatars/xuzhongyou.jpg","hash":"1db4dfaf23cf250f222a398326562d4170d3aaa1","modified":1673669622552},{"_id":"public/medias/avatars/milyyy.jpg","hash":"ac2826d9c28346efeb967df01465a2c74d9041fe","modified":1673669622552},{"_id":"public/medias/avatars/zzw.jpg","hash":"5d385b5732644b07b937a4919abc83cb95e14513","modified":1673669622552},{"_id":"public/medias/reward/alipay.jpg","hash":"9bade255a1918cfb3c3bcefbbbc8f163bf2e19e3","modified":1673669622552},{"_id":"public/medias/avatars/zhangting.jpg","hash":"10ee25ae3531f046a8bd3696c1cc8a16f0f25e1b","modified":1673669622552},{"_id":"public/libs/awesome/fonts/fontawesome-webfont.woff","hash":"28b782240b3e76db824e12c02754a9731a167527","modified":1673669622552},{"_id":"public/libs/awesome/fonts/fontawesome-webfont.woff2","hash":"d6f48cba7d076fb6f2fd6ba993a75b9dc1ecbf0c","modified":1673669622552},{"_id":"public/2019/11/03/mu-qiu-ru-dong-suo-yu/3.jpg","hash":"d5815a13619806513934da94c09ce324be399d21","modified":1673669622552},{"_id":"public/2019/11/03/mu-qiu-ru-dong-suo-yu/2.jpg","hash":"862814cbe78db293aba322121b276c6d083b833c","modified":1673669622552},{"_id":"public/2019/11/13/consensus/Distributed_system_Consistency_model-iteblog-392cde62-0df4-41ab-a200-8699a871dd03.jpg","hash":"b680e31d3efe5ea885098805128166c0624f75c8","modified":1673669622552},{"_id":"public/2019/11/13/consensus/Untitled-4a4eaa95-1ce8-4bbd-89c9-700ad82641db.png","hash":"0b826650dc1c91122ef76a68234d5d032298d440","modified":1673669622553},{"_id":"public/2019/11/13/consensus/Untitled-de737321-ffd8-4e8d-b3f7-3d5483db237e.png","hash":"0ae9ffd6e3d925dedefd13b4a50a1d7945ed24e0","modified":1673669622553},{"_id":"public/css/my.css","hash":"226252d852f8bdb63e49c99447336a8c071d8ec0","modified":1673669622569},{"_id":"public/css/my-gitalk.css","hash":"eeda46a83d0db1cc239a9cd27d544faf663f9883","modified":1673669622569},{"_id":"public/css/gitment.css","hash":"2bd15cc17dca35ac3ecc0acf167a23a1dd362acd","modified":1673669622573},{"_id":"public/js/search.js","hash":"499e11786efbb04815b54a1de317cc8606a37555","modified":1673669622573},{"_id":"public/js/matery.js","hash":"92f07106944f5ef7cd72e84bb3534513d00eebe1","modified":1673669622573},{"_id":"public/libs/aos/aos.js","hash":"02bfb40b0c4b6e9b0b4081218357145cbb327d74","modified":1673669622574},{"_id":"public/libs/aplayer/APlayer.min.css","hash":"07372a2ba507388d0fed166d761b1c2c2a659dce","modified":1673669622574},{"_id":"public/libs/jqcloud/jqcloud-1.0.4.min.js","hash":"257eaae3020599e4939f50d5008a743827f25b8c","modified":1673669622574},{"_id":"public/libs/jqcloud/jqcloud.css","hash":"20d9f11a19d95c70e27cb922e0d6dccbec4eae89","modified":1673669622574},{"_id":"public/libs/others/busuanzi.pure.mini.js","hash":"6e41f31100ae7eb3a6f23f2c168f6dd56e7f7a9a","modified":1673669622574},{"_id":"public/libs/others/clicklove.js","hash":"6a39b8c683ba5dcd92f70c6ab45d1cfac3213e8e","modified":1673669622574},{"_id":"public/libs/others/fireworks.js","hash":"53981959bc6def4a85bbbb41b07e4b1474a2124d","modified":1673669622574},{"_id":"public/libs/others/explosion.min.js","hash":"417b68e2cf2c6de2119c57626f4412105a8457f5","modified":1673669622574},{"_id":"public/libs/others/snow.js","hash":"7f3b1ad2f64d4473210a2c3218893649c73c980e","modified":1673669622574},{"_id":"public/libs/others/text.js","hash":"1791782cde0d1e4197f2ed58ecb7dd6aefddd169","modified":1673669622575},{"_id":"public/libs/scrollprogress/scrollProgress.min.js","hash":"777ffe5d07e85a14fbe97d846f45ffc0087251cc","modified":1673669622575},{"_id":"public/libs/tocbot/tocbot.css","hash":"15601837bf8557c2fd111e4450ed4c8495fd11a0","modified":1673669622575},{"_id":"public/libs/tocbot/tocbot.min.js","hash":"5ec27317f0270b8cf6b884c6f12025700b9a565c","modified":1673669622575},{"_id":"public/libs/share/css/share.min.css","hash":"8a778a86f3ce9a042df6be63a9f1039631e351a5","modified":1673669622575},{"_id":"public/css/matery.css","hash":"bdf8b434092b69ed16c97c3c78db578c578effd7","modified":1673669622575},{"_id":"public/libs/animate/animate.min.css","hash":"97afa151569f046b2e01f27c1871646e9cd87caf","modified":1673669622575},{"_id":"public/libs/aos/aos.css","hash":"191a3705a8f63e589a50a0ff2f2c5559f1a1b6b2","modified":1673669622575},{"_id":"public/libs/dplayer/DPlayer.min.css","hash":"f7d19655f873b813ffba5d1a17145c91f82631b8","modified":1673669622575},{"_id":"public/libs/cryptojs/crypto-js.min.js","hash":"5989527a378b55011a59522f41eeb3981518325c","modified":1673669622576},{"_id":"public/libs/gitalk/gitalk.css","hash":"3aac1db83b0135c521187254ff302d125cc30706","modified":1673669622576},{"_id":"public/libs/gitment/gitment-default.css","hash":"2903c59ee06b965bef32e937bd69f5b0b2190717","modified":1673669622576},{"_id":"public/libs/masonry/masonry.pkgd.min.js","hash":"ff940b4ea68368ca0e4d5560cbb79fb147dfc3c5","modified":1673669622576},{"_id":"public/libs/aplayer/APlayer.min.js","hash":"22caa28ff6b41a16ff40f15d38f1739e22359478","modified":1673669622576},{"_id":"public/libs/dplayer/DPlayer.min.js","hash":"c3bad7b265574fab0ae4d45867422ea1cb9d6599","modified":1673669622576},{"_id":"public/libs/jquery/jquery-2.2.0.min.js","hash":"5d7e5bbfa540f0e53bd599e4305e1a4e815b5dd1","modified":1673669622576},{"_id":"public/libs/gitment/gitment.js","hash":"28c02c45ce568e084cd1041dc493f83f9c6c88c6","modified":1673669622577},{"_id":"public/libs/valine/Valine.min.js","hash":"4e34802ccbb59f1daa58a62241ff57f923e50600","modified":1673669622577},{"_id":"public/libs/awesome/css/font-awesome.min.css","hash":"512c7d79033e3028a9be61b540cf1a6870c896f8","modified":1673669622577},{"_id":"public/libs/lightGallery/css/lightgallery.min.css","hash":"1b7227237f9785c66062a4811508916518e4132c","modified":1673669622577},{"_id":"public/libs/share/js/jquery.share.min.js","hash":"16ce82901ca0e302cf47a35fb10f59009a5e7eb9","modified":1673669622577},{"_id":"public/libs/share/js/social-share.min.js","hash":"4df722bafde2c5d8faaace0d1f894798385a8793","modified":1673669622577},{"_id":"public/libs/gitalk/gitalk.min.js","hash":"28bdb33c9eb609c2f30d431df1a4cf8ca70bf841","modified":1673669622577},{"_id":"public/libs/materialize/materialize.min.js","hash":"c8b4c65651921d888cf5f27430dfe2ad190d35bf","modified":1673669622578},{"_id":"public/libs/materialize/materialize.min.css","hash":"4d46df5f22cbc24eefa76228c7ee308dc3585594","modified":1673669622578},{"_id":"public/libs/valine/av-min.js","hash":"2577e72b52b736d99649f9e95be8976d58563333","modified":1673669622578},{"_id":"public/libs/lightGallery/js/lightgallery-all.min.js","hash":"9f5ef4bc8a0a3c746ca4f3c3e6d64493b1a977d8","modified":1673669622578},{"_id":"public/font/GT-Super-Text-Book.otf","hash":"123f698480dfa52209f3bf6a205fe900e40f2f52","modified":1673669622578},{"_id":"public/font/gotham-rounded-book.otf","hash":"eef7adef9ae4cd0aef444d9e448608e3f4d55dbd","modified":1673669622578},{"_id":"public/medias/avatars/0xbird.png","hash":"f9d597dfcb49e1e2be06138b24028291f5638610","modified":1673669622578},{"_id":"public/medias/avatars/mashiro.jpg","hash":"250e911c16eeb6acb1e6214ad3e6a3d762850a8e","modified":1673669622578},{"_id":"public/medias/avatars/lyn-draw.jpg","hash":"837d5d5df4dcb086d2da114d0d85084b4ec18768","modified":1673669622578},{"_id":"public/medias/avatars/qianqian.png","hash":"fed254c4e7eb58ee22d647acb83f1d08f4508f8f","modified":1673669622578},{"_id":"public/libs/awesome/fonts/fontawesome-webfont.ttf","hash":"13b1eab65a983c7a73bc7997c479d66943f7c6cb","modified":1673669622579},{"_id":"public/libs/awesome/fonts/fontawesome-webfont.eot","hash":"d980c2ce873dc43af460d4d572d441304499f400","modified":1673669622579},{"_id":"public/libs/awesome/fonts/FontAwesome.otf","hash":"048707bc52ac4b6563aaa383bfe8660a0ddc908c","modified":1673669622579},{"_id":"public/2019/11/13/consensus/Untitled-43522eca-aed6-4148-bc7c-499ba25e2284.png","hash":"2e681a6ac14990fc1ef212e6d1e024cee8d3c382","modified":1673669622579},{"_id":"public/libs/echarts/echarts.min.js","hash":"9496f386a0da4601cad22c479cc5543913a4d67f","modified":1673669622589},{"_id":"public/favicon.png","hash":"4731eda533b6ad2799f1ea30c0acc12d1b5b3cb2","modified":1673669622589},{"_id":"public/medias/avatars/lzh.png","hash":"8ffcbf19d6b38b891dbe408d9a4e9513b56f247e","modified":1673669622589},{"_id":"public/medias/avatars/jitao.jpg","hash":"5934b9baccebccbc2be2ead5d84ad32dd41f9559","modified":1673669622589},{"_id":"public/2019/11/13/consensus/Untitled-b4f0cf74-00d2-4eba-968f-619a4ed257da.png","hash":"fe568c9084515a66c41d8095ba8059e58d0fa909","modified":1673669622589},{"_id":"public/medias/avatars/avatar.jpg","hash":"4731eda533b6ad2799f1ea30c0acc12d1b5b3cb2","modified":1673669622596},{"_id":"public/medias/music/avatars/daoshu.jpg","hash":"eee120fdf5ccbe86aa7d51826c4c773e76e6357f","modified":1673669622596},{"_id":"public/medias/avatars/zhangyi.jpg","hash":"c9130036aac9a7ac8d62e33550a9d64896cdc364","modified":1673669622596},{"_id":"public/2019/11/13/consensus/Untitled-75e05e42-d661-4446-9120-ae13749b1535.png","hash":"73eec1fa4b7507fa79c9090f9dbceb3791964db3","modified":1673669622596},{"_id":"public/2019/11/13/consensus/Untitled-a6750265-7683-4067-8d61-206f696acc69.png","hash":"dfe3c4b0739ee9d8d7bc7fb4d4aea4d8e67d9749","modified":1673669622596},{"_id":"public/2019/11/13/consensus/Untitled-e36f718a-403c-40fc-adfe-423e7d7e6836.png","hash":"4750c9b7c9f8d4bfbad306c247926ef1d23b99f4","modified":1673669622597},{"_id":"public/medias/featureimages/10.jpg","hash":"a5b8ac2f7703c81c99e1ddb822d46c55dfe1f140","modified":1673669622602},{"_id":"public/medias/banner/10.jpg","hash":"a5b8ac2f7703c81c99e1ddb822d46c55dfe1f140","modified":1673669622602},{"_id":"public/2019/11/13/consensus/Untitled-9d3289bb-0f85-43cb-913e-5c3690982bf5.png","hash":"f1fb11a62f569ad75f216ce43ce5fd29d6e90ed8","modified":1673669622602},{"_id":"public/medias/avatars/jingjing.jpg","hash":"bfcab0139edb2509de984cb0a9b156879c355158","modified":1673669622608},{"_id":"public/2019/11/13/consensus/Untitled-03b14664-4015-4295-9be4-ed16042a68b7.png","hash":"4d2dcd1586340167593ccd8744ac90e9a6871043","modified":1673669622608},{"_id":"public/medias/banner/6.jpg","hash":"f37e543f6ff9d88bf9a82b0da8cb14f8f1f67e1b","modified":1673669622616},{"_id":"public/libs/awesome/fonts/fontawesome-webfont.svg","hash":"98a8aa5cf7d62c2eff5f07ede8d844b874ef06ed","modified":1673669622616},{"_id":"public/medias/featureimages/7.jpg","hash":"d3b576105cc6a5b9610a5c958e78709b161e531c","modified":1673669622625},{"_id":"public/2019/11/13/consensus/Untitled-12f560d2-d186-4995-8545-bad7909240b7.png","hash":"056361b8985a287e441dcea1d2c1ad461cb9c912","modified":1673669622625},{"_id":"public/medias/banner/1.jpg","hash":"03bf2578cdf00fb1e951ef189062c5f3e2d6b371","modified":1673669622633},{"_id":"public/medias/featureimages/1.jpg","hash":"03bf2578cdf00fb1e951ef189062c5f3e2d6b371","modified":1673669622633},{"_id":"public/2019/11/12/songcisishou/1.jpg","hash":"7d730160ce1461aef75ba74786f80b6e01839e43","modified":1673669622634},{"_id":"public/2019/11/13/consensus/Untitled-2a2f06c4-1305-44ec-98ea-94a532d36d56.png","hash":"0f818e96f221ebcd27c7e4c29857fb441a901232","modified":1673669622634},{"_id":"public/medias/banner/7.jpg","hash":"d3b576105cc6a5b9610a5c958e78709b161e531c","modified":1673669622639},{"_id":"public/medias/featureimages/6.jpg","hash":"f37e543f6ff9d88bf9a82b0da8cb14f8f1f67e1b","modified":1673669622639},{"_id":"public/medias/banner/5.jpg","hash":"03bf2578cdf00fb1e951ef189062c5f3e2d6b371","modified":1673669622640},{"_id":"public/medias/featureimages/5.jpg","hash":"03bf2578cdf00fb1e951ef189062c5f3e2d6b371","modified":1673669622640},{"_id":"public/font/Baloo2-VariableFont_wght.ttf","hash":"5173aa48145d1395c4127eb10e6df0edc730cd33","modified":1673669622664},{"_id":"public/medias/featureimages/9.jpg","hash":"f147d6e4e674910d1cf53841cd69edd92a5f8384","modified":1673669622664},{"_id":"public/medias/banner/9.jpg","hash":"f147d6e4e674910d1cf53841cd69edd92a5f8384","modified":1673669622670},{"_id":"public/medias/pic/2.jpg","hash":"cc627273581edb39d6d8eed689a06c0aa6ef96c8","modified":1673669622675},{"_id":"public/medias/banner/12.jpg","hash":"0389e7e88060591d2d9e623989791f1ae9a2b5df","modified":1673669622703},{"_id":"public/medias/featureimages/12.jpg","hash":"0389e7e88060591d2d9e623989791f1ae9a2b5df","modified":1673669622706},{"_id":"public/medias/featureimages/4.jpg","hash":"fa77b51a6b427148e325155d269ec6bcb6577214","modified":1673669622733},{"_id":"public/medias/banner/4.jpg","hash":"fa77b51a6b427148e325155d269ec6bcb6577214","modified":1673669622736},{"_id":"public/medias/banner/3.jpg","hash":"173e7f40e44b2f3f8f0cecac2f0449b150d66eb5","modified":1673669622741},{"_id":"public/medias/featureimages/3.jpg","hash":"173e7f40e44b2f3f8f0cecac2f0449b150d66eb5","modified":1673669622744},{"_id":"public/medias/featureimages/8.jpg","hash":"2b66e0b008146b54c115a25570ad431578b49f45","modified":1673669622754},{"_id":"public/medias/featureimages/2.jpg","hash":"2b66e0b008146b54c115a25570ad431578b49f45","modified":1673669622754},{"_id":"public/medias/banner/2.jpg","hash":"2b66e0b008146b54c115a25570ad431578b49f45","modified":1673669622755},{"_id":"public/medias/banner/8.jpg","hash":"2b66e0b008146b54c115a25570ad431578b49f45","modified":1673669622758},{"_id":"public/medias/featureimages/11.jpg","hash":"1f1f47c8c94680c14daa08fdb3e1b2f5eb139bca","modified":1673669622760},{"_id":"public/medias/banner/11.jpg","hash":"1f1f47c8c94680c14daa08fdb3e1b2f5eb139bca","modified":1673669622760},{"_id":"public/2019/11/13/consensus/Untitled-a17735d5-49dd-4565-8bbf-271c080e18a5.png","hash":"098f8bf2293974c4107f949ec8d8e17d0c30b25f","modified":1673669622764},{"_id":"public/medias/featureimages/psc5.jpeg","hash":"77f9e6e4fc798cb137ba4cad3db19a31a69f5e9b","modified":1673669622772},{"_id":"public/font/LXGWWenKai-Regular.ttf","hash":"ecece368b2cfe93b3138a1f458f9b7f43dedaa30","modified":1673669622814}],"Category":[{"name":"诗歌","_id":"clcvfoh2r000550pqv9cjejh6"},{"name":"散文","_id":"clcvfoh2y000850pqj0kbtedo"},{"name":"技术","_id":"clcvfoh32000c50pqbvtm0mf3"}],"Data":[],"Page":[{"title":"404","date":"2019-07-19T08:41:10.000Z","type":"404","layout":"404","description":"静一静也挺好的。","_content":"","source":"404.md","raw":"---\ntitle: 404\ndate: 2019-07-19 16:41:10\ntype: \"404\"\nlayout: \"404\"\ndescription: \"静一静也挺好的。\"\n---\n","updated":"2022-11-18T07:58:21.454Z","path":"404.html","comments":1,"_id":"clcvfoh1b000050pqd8l20ko9","content":"","site":{"data":{}},"excerpt":"","more":""},{"title":"Resume","type":"Resume","layout":"Resume","date":"2023-01-07T13:50:07.000Z","_content":"<img style=\"position:relative;right:30px;float:right\" src=\"/medias/pic/2.jpg\" width=\"15%\" height=\"48%\">\n\n# Keywords\n* **TL;DR**\nChinese Name: Xie, Zheng \nEnglish Name: Ben \nBirthday: 1989.5.12 \nGood at English and Chinese. [listen](https://music.163.com/dj?id=2059907935&userid=52336738). \nWorked in Baidu, Xiaomi, Tencent, VMware, and other top-tier Internet companies, and is familiar with mainstream Internet technologies. \nHas 10 years of experience. \nLike distributed technologies, my paper *A Brief Discussion on CAP and Paxos Consensus Algorithm* was selected as one of Tencent's external technical engineering anthologies. [link](https://mp.weixin.qq.com/s/Fj4zERz9PEuNumd_SI0bEA). \nPassionate about innovation and published patents at VMware *VMWI609.WO-NAMED PORT SECURITY POLICY–A MORE FLEXIBLE TRAFFIC ISOLATION SOLUTION*.\n\n# Skills\n* **TL;DR**\nPython/C/C++/PHP/Golang. Docker, Linux/Unix Zookeeper/SQS \nTCP/IP/HTTP/gRPC, Mysql/Redis/MongoDB, AWS/vSphere/NSX-T \nDistributed System Development \nMainstream web technology\n\n# Highlights\n* **TL;DR**\nExperience with the world’s top 500 Internet companies for 10 years \nExperience of the Chinese top 3 Internet companies for 3 years \nGood at English speaking and writing \nFast learning ability\n\n# Education\n* **Bachelor of Computer Science and Technology** \n \n Zhejiang University of Technology \n 2008/09 - 2012/06\n\n# Company Experience\n### 2021.4 - Now\n\n* **VMware JIL in vSphere k8s drivers Member of Technical Staff**\n\n1. Responsible for the development of the company’s core products vSphere, NSX-T network components, especially the architecture design of K8S and NSX-T interoperability component CNI [nsx-operator](https://github.com/vmware-tanzu/nsx-operator.git).\n\n### 2019.4 - 2021.4\n\n* **Senior engineer of Tencent cloud network group**\n\n1. Responsible for background development of Tencent Cloud VPC(virtual private cloud) network controller, VPC is the exclusive network space built based on Tencent Cloud, providing network services or resources. There is complete logical isolation between different private networks. You can customize the network environment, routing table, security policy, etc. At the same time, private networks support multiple ways to connect to the Internet, other VPCs, and local data centers, enabling easy deployment of networks in the cloud. The private cloud network is the core of the entire Tencent cloud network, and the controller is responsible for distributing hundreds of thousands of physical machines and gateway flow tables. Now Tencent Cloud operates 25 geographic regions and 53 available areas. At the controller level, the Mysql storage flow table is adopted, ZooKeeper is used as middleware to actively inform the physical machine and gateway to send and receive data, and custom protocol or Protobuf protocol is used for data communication with DPDK or Netlink.\n2. Responsible for background development of the control level of basic network security group. The security group is a virtual firewall with a stateful packet filtering function. It is used to set the network access control of the cloud server, load balancing, cloud database, and other instances, and control the in-out traffic at the instance level. It is an important may of network security isolation. Like the private cloud network controller, ZooKeeper is also adopted as the middleware notification security policy, and the physical machine uses the kernel NetFilter Framework to filter packets.\n3. Responsible for auto-testing cases for controller components.\n\n### 2018.8 - 2019.4\n\n* **Senior engineer of SHAREit**\n\n1. Responsible for large-scale crawling of YouTube videos, changing the original stand-alone mode to distributed crawling AWS EC2 Autoscaling cluster is used to implement consumer competitive crawling and parsing of data, Mysql is used to store keyword crawling progress and number, Redis bitmap is used to implement Bloom filters for duplicated videos. AWS SQS is used to implement message queue buffering, and Dynamodb is used to implement underlying storage. AWS Lambda is used to trigger ElasticSearch index synchronization and support the server query. Improve the original data volume of less than 10,000 a day to 200,000 a day, DAU reaches 30 million in India and 10 million in Non-India.\n2. Responsible for the CDN address parsing of YouTube video source and storage of the clients-sourcing analysis, receiving 20,000 data per second from the client. Use the AWS Aurora database to store links that are parsed by the server and uploaded by the client Supports storage by country and city dimensions. Redis distributed locks are used to coordinate consumer competition for resources and prevent duplicate parsing. Timely remove expired links, timely detect 302-jump links and their availability, increase the rate of link release from the original less than 30/% to 99.99/%, and increase the success rate of the link to 80%. Further optimization is carried out to reduce the number of instances from 100 to 50. This project is awarded as the annual excellent project by the company.\n\n### 2015.10 - 2018.8\n\n* **Senior engineer of Xiaomi TV**\n\n1. Mobile Pictorial is a built-in application for Xiaomi mobile phones, with an entrance that allows users to choose to open or close it. Participated in the design of the background architecture and operation platform, and the joint of Xiaomi recommendation system and data factory The master and slave MySQL is used as the underlying database for the Django operation platform to release data to Redis. Nginx does load balancing and distributes requests to the Tornado process in the background. Tornado is responsible for responding to Redis data to the client, and QPS reaches 5K.\n2. Mobile video realizes the function of watching TV series. Once a user subscribes to a new TV series, it will automatically dock with the Xiaomi push system to notify the user. The client registers the Topic with the EPISODE ID on the PUSH system, and the server regularly detects Whether there are new episodes, while the POST request pushes the system and sends notifications to the client.\n3. Currently, Xiaomi TV has sold 10 million sets in China, with QPS reaching 20,000. However, due to the aggregation of CP resources from all parties, it often crashes when playing videos and browsing data. To timely understand and record the client error log, the report barrier platform is designed independently Multi-producer and multi-consumer models are adopted for development, and the Kestrel message queue of Twitter is introduced to access Xiaomi Cloud FDS. OpenFalcon operation and maintenance monitoring are added to monitor the queue situation and request status in real-time. Asynchronous multiple Tornado process to accept the client from the compressed log data, and promptly return to the client the reported barrier ID, the log maximum size reaches 100k, the log data is sent to the Kestrel message queue, multiple consumers process to read data from the queue, write the FDS, and will return to the log after the FDS download link along with other metadata, improve the stability of the play resources. Since the Kestrel Python client is prone to fetch the same data when fetching data with high concurrency, distributed locking is introduced to solve this problem.\n4. PatChWall is the core business of Xiaomi TV. It is the place with the most user experience and also the main business. To expand its international business, Xiaomi TV cooperated with Google to develop ATV(Android TV), expanded into the markets of India, Indonesia, and Russia, and connected to more than 10 local CPs. Regarding Xiaomi TV background architecture, developed and deployed international business. The Service API uses the Python Tornado framework, the search engine uses Solr, the cache layer uses Redis consistent Hash, and the persistence layer uses the master-slave Mysql and Redis. The operating system is based on Django Admin, and it supports multiple languages. Combined with local laws and other special circumstances, start multiprocessor, for all posters processed into a uniform format, plus the effect of mask and edge blur. The international version of the code is called II8N CNS, il8N Service. In different countries, because we provide the platform, I proposed the scheme, using a set of the same code, but different configurations according to different countries with multiple sets of data, each country deployed an independent room, in this way, for the development, you just need to change a code. Data standardization also saves docking costs.\n5. Independently develop the function of apt upgrade. Calculating the time window according to the current time percentage, and calculating whether it falls Into the time window according to the hash value of the device id of the TV, saves bandwidth cost, gray level upgrade principle is adopted.\n\n### 2014.8 - 2015.10\n\n* **Engineer of Knownsec**\n\n1. Monitor hacker attacks on Chinese government websites through crawlers, and provide alarm information to public security departments timely.\n2. Responsible for the back-end system of the star map project, which stored the vulnerability information of the website Since there is no self-built CDN, GridFS is adopted to store static data such as images.\n\n### 2013.2 - 2014.8\n\n* **Engineer of Baidu Mobile**\n\n1. The main business is mobile games and application distribution. The background mainly uses C++ language and the UB framework developed by Baidu to provide interfaces for clients and the middle tier to support various businesses. QPS up to 3k.\n2. Independently develop the chess and card hall project, and design the activity of users competing for raffle tickets. Background Nginx and Openresty filter request flow, multiple application servers to implement application logic, lottery storage in Redis, using Redis transaction function and atomic operation to achieve inventory addition and subtraction.\n3. MySQL stores resource data and MongoDB is responsible for interface data.\n\n### 2012.10 - 2013.2\n\n* **Engineer of Hundsun electronic bank** \n Responsible for the development of low counter of bank financial management sales system.\n\n# Contact\n* **Email** \n [[email protected]](mailto:[email protected])\n* **WeChat** \n zhengxiexie\n* **QQ** \n 373618217\n* **Blog** \n [https://zhengxiexie.github.io/](https://zhengxiexie.github.io/)","source":"Resume/index.md","raw":"---\ntitle: Resume\ntype: Resume\nlayout: Resume\ndate: 2023-01-07 21:50:07\n---\n<img style=\"position:relative;right:30px;float:right\" src=\"/medias/pic/2.jpg\" width=\"15%\" height=\"48%\">\n\n# Keywords\n* **TL;DR**\nChinese Name: Xie, Zheng \nEnglish Name: Ben \nBirthday: 1989.5.12 \nGood at English and Chinese. [listen](https://music.163.com/dj?id=2059907935&userid=52336738). \nWorked in Baidu, Xiaomi, Tencent, VMware, and other top-tier Internet companies, and is familiar with mainstream Internet technologies. \nHas 10 years of experience. \nLike distributed technologies, my paper *A Brief Discussion on CAP and Paxos Consensus Algorithm* was selected as one of Tencent's external technical engineering anthologies. [link](https://mp.weixin.qq.com/s/Fj4zERz9PEuNumd_SI0bEA). \nPassionate about innovation and published patents at VMware *VMWI609.WO-NAMED PORT SECURITY POLICY–A MORE FLEXIBLE TRAFFIC ISOLATION SOLUTION*.\n\n# Skills\n* **TL;DR**\nPython/C/C++/PHP/Golang. Docker, Linux/Unix Zookeeper/SQS \nTCP/IP/HTTP/gRPC, Mysql/Redis/MongoDB, AWS/vSphere/NSX-T \nDistributed System Development \nMainstream web technology\n\n# Highlights\n* **TL;DR**\nExperience with the world’s top 500 Internet companies for 10 years \nExperience of the Chinese top 3 Internet companies for 3 years \nGood at English speaking and writing \nFast learning ability\n\n# Education\n* **Bachelor of Computer Science and Technology** \n \n Zhejiang University of Technology \n 2008/09 - 2012/06\n\n# Company Experience\n### 2021.4 - Now\n\n* **VMware JIL in vSphere k8s drivers Member of Technical Staff**\n\n1. Responsible for the development of the company’s core products vSphere, NSX-T network components, especially the architecture design of K8S and NSX-T interoperability component CNI [nsx-operator](https://github.com/vmware-tanzu/nsx-operator.git).\n\n### 2019.4 - 2021.4\n\n* **Senior engineer of Tencent cloud network group**\n\n1. Responsible for background development of Tencent Cloud VPC(virtual private cloud) network controller, VPC is the exclusive network space built based on Tencent Cloud, providing network services or resources. There is complete logical isolation between different private networks. You can customize the network environment, routing table, security policy, etc. At the same time, private networks support multiple ways to connect to the Internet, other VPCs, and local data centers, enabling easy deployment of networks in the cloud. The private cloud network is the core of the entire Tencent cloud network, and the controller is responsible for distributing hundreds of thousands of physical machines and gateway flow tables. Now Tencent Cloud operates 25 geographic regions and 53 available areas. At the controller level, the Mysql storage flow table is adopted, ZooKeeper is used as middleware to actively inform the physical machine and gateway to send and receive data, and custom protocol or Protobuf protocol is used for data communication with DPDK or Netlink.\n2. Responsible for background development of the control level of basic network security group. The security group is a virtual firewall with a stateful packet filtering function. It is used to set the network access control of the cloud server, load balancing, cloud database, and other instances, and control the in-out traffic at the instance level. It is an important may of network security isolation. Like the private cloud network controller, ZooKeeper is also adopted as the middleware notification security policy, and the physical machine uses the kernel NetFilter Framework to filter packets.\n3. Responsible for auto-testing cases for controller components.\n\n### 2018.8 - 2019.4\n\n* **Senior engineer of SHAREit**\n\n1. Responsible for large-scale crawling of YouTube videos, changing the original stand-alone mode to distributed crawling AWS EC2 Autoscaling cluster is used to implement consumer competitive crawling and parsing of data, Mysql is used to store keyword crawling progress and number, Redis bitmap is used to implement Bloom filters for duplicated videos. AWS SQS is used to implement message queue buffering, and Dynamodb is used to implement underlying storage. AWS Lambda is used to trigger ElasticSearch index synchronization and support the server query. Improve the original data volume of less than 10,000 a day to 200,000 a day, DAU reaches 30 million in India and 10 million in Non-India.\n2. Responsible for the CDN address parsing of YouTube video source and storage of the clients-sourcing analysis, receiving 20,000 data per second from the client. Use the AWS Aurora database to store links that are parsed by the server and uploaded by the client Supports storage by country and city dimensions. Redis distributed locks are used to coordinate consumer competition for resources and prevent duplicate parsing. Timely remove expired links, timely detect 302-jump links and their availability, increase the rate of link release from the original less than 30/% to 99.99/%, and increase the success rate of the link to 80%. Further optimization is carried out to reduce the number of instances from 100 to 50. This project is awarded as the annual excellent project by the company.\n\n### 2015.10 - 2018.8\n\n* **Senior engineer of Xiaomi TV**\n\n1. Mobile Pictorial is a built-in application for Xiaomi mobile phones, with an entrance that allows users to choose to open or close it. Participated in the design of the background architecture and operation platform, and the joint of Xiaomi recommendation system and data factory The master and slave MySQL is used as the underlying database for the Django operation platform to release data to Redis. Nginx does load balancing and distributes requests to the Tornado process in the background. Tornado is responsible for responding to Redis data to the client, and QPS reaches 5K.\n2. Mobile video realizes the function of watching TV series. Once a user subscribes to a new TV series, it will automatically dock with the Xiaomi push system to notify the user. The client registers the Topic with the EPISODE ID on the PUSH system, and the server regularly detects Whether there are new episodes, while the POST request pushes the system and sends notifications to the client.\n3. Currently, Xiaomi TV has sold 10 million sets in China, with QPS reaching 20,000. However, due to the aggregation of CP resources from all parties, it often crashes when playing videos and browsing data. To timely understand and record the client error log, the report barrier platform is designed independently Multi-producer and multi-consumer models are adopted for development, and the Kestrel message queue of Twitter is introduced to access Xiaomi Cloud FDS. OpenFalcon operation and maintenance monitoring are added to monitor the queue situation and request status in real-time. Asynchronous multiple Tornado process to accept the client from the compressed log data, and promptly return to the client the reported barrier ID, the log maximum size reaches 100k, the log data is sent to the Kestrel message queue, multiple consumers process to read data from the queue, write the FDS, and will return to the log after the FDS download link along with other metadata, improve the stability of the play resources. Since the Kestrel Python client is prone to fetch the same data when fetching data with high concurrency, distributed locking is introduced to solve this problem.\n4. PatChWall is the core business of Xiaomi TV. It is the place with the most user experience and also the main business. To expand its international business, Xiaomi TV cooperated with Google to develop ATV(Android TV), expanded into the markets of India, Indonesia, and Russia, and connected to more than 10 local CPs. Regarding Xiaomi TV background architecture, developed and deployed international business. The Service API uses the Python Tornado framework, the search engine uses Solr, the cache layer uses Redis consistent Hash, and the persistence layer uses the master-slave Mysql and Redis. The operating system is based on Django Admin, and it supports multiple languages. Combined with local laws and other special circumstances, start multiprocessor, for all posters processed into a uniform format, plus the effect of mask and edge blur. The international version of the code is called II8N CNS, il8N Service. In different countries, because we provide the platform, I proposed the scheme, using a set of the same code, but different configurations according to different countries with multiple sets of data, each country deployed an independent room, in this way, for the development, you just need to change a code. Data standardization also saves docking costs.\n5. Independently develop the function of apt upgrade. Calculating the time window according to the current time percentage, and calculating whether it falls Into the time window according to the hash value of the device id of the TV, saves bandwidth cost, gray level upgrade principle is adopted.\n\n### 2014.8 - 2015.10\n\n* **Engineer of Knownsec**\n\n1. Monitor hacker attacks on Chinese government websites through crawlers, and provide alarm information to public security departments timely.\n2. Responsible for the back-end system of the star map project, which stored the vulnerability information of the website Since there is no self-built CDN, GridFS is adopted to store static data such as images.\n\n### 2013.2 - 2014.8\n\n* **Engineer of Baidu Mobile**\n\n1. The main business is mobile games and application distribution. The background mainly uses C++ language and the UB framework developed by Baidu to provide interfaces for clients and the middle tier to support various businesses. QPS up to 3k.\n2. Independently develop the chess and card hall project, and design the activity of users competing for raffle tickets. Background Nginx and Openresty filter request flow, multiple application servers to implement application logic, lottery storage in Redis, using Redis transaction function and atomic operation to achieve inventory addition and subtraction.\n3. MySQL stores resource data and MongoDB is responsible for interface data.\n\n### 2012.10 - 2013.2\n\n* **Engineer of Hundsun electronic bank** \n Responsible for the development of low counter of bank financial management sales system.\n\n# Contact\n* **Email** \n [[email protected]](mailto:[email protected])\n* **WeChat** \n zhengxiexie\n* **QQ** \n 373618217\n* **Blog** \n [https://zhengxiexie.github.io/](https://zhengxiexie.github.io/)","updated":"2023-01-11T14:02:03.877Z","path":"Resume/index.html","comments":1,"_id":"clcvfoh2i000150pqzugcyitq","content":"<img style=\"position:relative;right:30px;float:right\" src=\"/medias/pic/2.jpg\" width=\"15%\" height=\"48%\">\n\n<h1 id=\"Keywords\"><a href=\"#Keywords\" class=\"headerlink\" title=\"Keywords\"></a>Keywords</h1><ul>\n<li><strong>TL;DR</strong><br>Chinese Name: Xie, Zheng<br>English Name: Ben<br>Birthday: 1989.5.12<br>Good at English and Chinese. <a href=\"https://music.163.com/dj?id=2059907935&userid=52336738\" target=\"_blank\" rel=\"noopener\">listen</a>.<br>Worked in Baidu, Xiaomi, Tencent, VMware, and other top-tier Internet companies, and is familiar with mainstream Internet technologies.<br>Has 10 years of experience.<br>Like distributed technologies, my paper <em>A Brief Discussion on CAP and Paxos Consensus Algorithm</em> was selected as one of Tencent’s external technical engineering anthologies. <a href=\"https://mp.weixin.qq.com/s/Fj4zERz9PEuNumd_SI0bEA\" target=\"_blank\" rel=\"noopener\">link</a>.<br>Passionate about innovation and published patents at VMware <em>VMWI609.WO-NAMED PORT SECURITY POLICY–A MORE FLEXIBLE TRAFFIC ISOLATION SOLUTION</em>.</li>\n</ul>\n<h1 id=\"Skills\"><a href=\"#Skills\" class=\"headerlink\" title=\"Skills\"></a>Skills</h1><ul>\n<li><strong>TL;DR</strong><br>Python/C/C++/PHP/Golang. Docker, Linux/Unix Zookeeper/SQS<br>TCP/IP/HTTP/gRPC, Mysql/Redis/MongoDB, AWS/vSphere/NSX-T<br>Distributed System Development<br>Mainstream web technology</li>\n</ul>\n<h1 id=\"Highlights\"><a href=\"#Highlights\" class=\"headerlink\" title=\"Highlights\"></a>Highlights</h1><ul>\n<li><strong>TL;DR</strong><br>Experience with the world’s top 500 Internet companies for 10 years<br>Experience of the Chinese top 3 Internet companies for 3 years<br>Good at English speaking and writing<br>Fast learning ability</li>\n</ul>\n<h1 id=\"Education\"><a href=\"#Education\" class=\"headerlink\" title=\"Education\"></a>Education</h1><ul>\n<li><p><strong>Bachelor of Computer Science and Technology</strong> </p>\n<p> Zhejiang University of Technology<br> 2008/09 - 2012/06</p>\n</li>\n</ul>\n<h1 id=\"Company-Experience\"><a href=\"#Company-Experience\" class=\"headerlink\" title=\"Company Experience\"></a>Company Experience</h1><h3 id=\"2021-4-Now\"><a href=\"#2021-4-Now\" class=\"headerlink\" title=\"2021.4 - Now\"></a>2021.4 - Now</h3><ul>\n<li><strong>VMware JIL in vSphere k8s drivers Member of Technical Staff</strong></li>\n</ul>\n<ol>\n<li>Responsible for the development of the company’s core products vSphere, NSX-T network components, especially the architecture design of K8S and NSX-T interoperability component CNI <a href=\"https://github.com/vmware-tanzu/nsx-operator.git\" target=\"_blank\" rel=\"noopener\">nsx-operator</a>.</li>\n</ol>\n<h3 id=\"2019-4-2021-4\"><a href=\"#2019-4-2021-4\" class=\"headerlink\" title=\"2019.4 - 2021.4\"></a>2019.4 - 2021.4</h3><ul>\n<li><strong>Senior engineer of Tencent cloud network group</strong></li>\n</ul>\n<ol>\n<li>Responsible for background development of Tencent Cloud VPC(virtual private cloud) network controller, VPC is the exclusive network space built based on Tencent Cloud, providing network services or resources. There is complete logical isolation between different private networks. You can customize the network environment, routing table, security policy, etc. At the same time, private networks support multiple ways to connect to the Internet, other VPCs, and local data centers, enabling easy deployment of networks in the cloud. The private cloud network is the core of the entire Tencent cloud network, and the controller is responsible for distributing hundreds of thousands of physical machines and gateway flow tables. Now Tencent Cloud operates 25 geographic regions and 53 available areas. At the controller level, the Mysql storage flow table is adopted, ZooKeeper is used as middleware to actively inform the physical machine and gateway to send and receive data, and custom protocol or Protobuf protocol is used for data communication with DPDK or Netlink.</li>\n<li>Responsible for background development of the control level of basic network security group. The security group is a virtual firewall with a stateful packet filtering function. It is used to set the network access control of the cloud server, load balancing, cloud database, and other instances, and control the in-out traffic at the instance level. It is an important may of network security isolation. Like the private cloud network controller, ZooKeeper is also adopted as the middleware notification security policy, and the physical machine uses the kernel NetFilter Framework to filter packets.</li>\n<li>Responsible for auto-testing cases for controller components.</li>\n</ol>\n<h3 id=\"2018-8-2019-4\"><a href=\"#2018-8-2019-4\" class=\"headerlink\" title=\"2018.8 - 2019.4\"></a>2018.8 - 2019.4</h3><ul>\n<li><strong>Senior engineer of SHAREit</strong></li>\n</ul>\n<ol>\n<li>Responsible for large-scale crawling of YouTube videos, changing the original stand-alone mode to distributed crawling AWS EC2 Autoscaling cluster is used to implement consumer competitive crawling and parsing of data, Mysql is used to store keyword crawling progress and number, Redis bitmap is used to implement Bloom filters for duplicated videos. AWS SQS is used to implement message queue buffering, and Dynamodb is used to implement underlying storage. AWS Lambda is used to trigger ElasticSearch index synchronization and support the server query. Improve the original data volume of less than 10,000 a day to 200,000 a day, DAU reaches 30 million in India and 10 million in Non-India.</li>\n<li>Responsible for the CDN address parsing of YouTube video source and storage of the clients-sourcing analysis, receiving 20,000 data per second from the client. Use the AWS Aurora database to store links that are parsed by the server and uploaded by the client Supports storage by country and city dimensions. Redis distributed locks are used to coordinate consumer competition for resources and prevent duplicate parsing. Timely remove expired links, timely detect 302-jump links and their availability, increase the rate of link release from the original less than 30/% to 99.99/%, and increase the success rate of the link to 80%. Further optimization is carried out to reduce the number of instances from 100 to 50. This project is awarded as the annual excellent project by the company.</li>\n</ol>\n<h3 id=\"2015-10-2018-8\"><a href=\"#2015-10-2018-8\" class=\"headerlink\" title=\"2015.10 - 2018.8\"></a>2015.10 - 2018.8</h3><ul>\n<li><strong>Senior engineer of Xiaomi TV</strong></li>\n</ul>\n<ol>\n<li>Mobile Pictorial is a built-in application for Xiaomi mobile phones, with an entrance that allows users to choose to open or close it. Participated in the design of the background architecture and operation platform, and the joint of Xiaomi recommendation system and data factory The master and slave MySQL is used as the underlying database for the Django operation platform to release data to Redis. Nginx does load balancing and distributes requests to the Tornado process in the background. Tornado is responsible for responding to Redis data to the client, and QPS reaches 5K.</li>\n<li>Mobile video realizes the function of watching TV series. Once a user subscribes to a new TV series, it will automatically dock with the Xiaomi push system to notify the user. The client registers the Topic with the EPISODE ID on the PUSH system, and the server regularly detects Whether there are new episodes, while the POST request pushes the system and sends notifications to the client.</li>\n<li>Currently, Xiaomi TV has sold 10 million sets in China, with QPS reaching 20,000. However, due to the aggregation of CP resources from all parties, it often crashes when playing videos and browsing data. To timely understand and record the client error log, the report barrier platform is designed independently Multi-producer and multi-consumer models are adopted for development, and the Kestrel message queue of Twitter is introduced to access Xiaomi Cloud FDS. OpenFalcon operation and maintenance monitoring are added to monitor the queue situation and request status in real-time. Asynchronous multiple Tornado process to accept the client from the compressed log data, and promptly return to the client the reported barrier ID, the log maximum size reaches 100k, the log data is sent to the Kestrel message queue, multiple consumers process to read data from the queue, write the FDS, and will return to the log after the FDS download link along with other metadata, improve the stability of the play resources. Since the Kestrel Python client is prone to fetch the same data when fetching data with high concurrency, distributed locking is introduced to solve this problem.</li>\n<li>PatChWall is the core business of Xiaomi TV. It is the place with the most user experience and also the main business. To expand its international business, Xiaomi TV cooperated with Google to develop ATV(Android TV), expanded into the markets of India, Indonesia, and Russia, and connected to more than 10 local CPs. Regarding Xiaomi TV background architecture, developed and deployed international business. The Service API uses the Python Tornado framework, the search engine uses Solr, the cache layer uses Redis consistent Hash, and the persistence layer uses the master-slave Mysql and Redis. The operating system is based on Django Admin, and it supports multiple languages. Combined with local laws and other special circumstances, start multiprocessor, for all posters processed into a uniform format, plus the effect of mask and edge blur. The international version of the code is called II8N CNS, il8N Service. In different countries, because we provide the platform, I proposed the scheme, using a set of the same code, but different configurations according to different countries with multiple sets of data, each country deployed an independent room, in this way, for the development, you just need to change a code. Data standardization also saves docking costs.</li>\n<li>Independently develop the function of apt upgrade. Calculating the time window according to the current time percentage, and calculating whether it falls Into the time window according to the hash value of the device id of the TV, saves bandwidth cost, gray level upgrade principle is adopted.</li>\n</ol>\n<h3 id=\"2014-8-2015-10\"><a href=\"#2014-8-2015-10\" class=\"headerlink\" title=\"2014.8 - 2015.10\"></a>2014.8 - 2015.10</h3><ul>\n<li><strong>Engineer of Knownsec</strong></li>\n</ul>\n<ol>\n<li>Monitor hacker attacks on Chinese government websites through crawlers, and provide alarm information to public security departments timely.</li>\n<li>Responsible for the back-end system of the star map project, which stored the vulnerability information of the website Since there is no self-built CDN, GridFS is adopted to store static data such as images.</li>\n</ol>\n<h3 id=\"2013-2-2014-8\"><a href=\"#2013-2-2014-8\" class=\"headerlink\" title=\"2013.2 - 2014.8\"></a>2013.2 - 2014.8</h3><ul>\n<li><strong>Engineer of Baidu Mobile</strong></li>\n</ul>\n<ol>\n<li>The main business is mobile games and application distribution. The background mainly uses C++ language and the UB framework developed by Baidu to provide interfaces for clients and the middle tier to support various businesses. QPS up to 3k.</li>\n<li>Independently develop the chess and card hall project, and design the activity of users competing for raffle tickets. Background Nginx and Openresty filter request flow, multiple application servers to implement application logic, lottery storage in Redis, using Redis transaction function and atomic operation to achieve inventory addition and subtraction.</li>\n<li>MySQL stores resource data and MongoDB is responsible for interface data.</li>\n</ol>\n<h3 id=\"2012-10-2013-2\"><a href=\"#2012-10-2013-2\" class=\"headerlink\" title=\"2012.10 - 2013.2\"></a>2012.10 - 2013.2</h3><ul>\n<li><strong>Engineer of Hundsun electronic bank</strong><br>Responsible for the development of low counter of bank financial management sales system.</li>\n</ul>\n<h1 id=\"Contact\"><a href=\"#Contact\" class=\"headerlink\" title=\"Contact\"></a>Contact</h1><ul>\n<li><strong>Email</strong><br><a href=\"mailto:[email protected]\" target=\"_blank\" rel=\"noopener\">[email protected]</a></li>\n<li><strong>WeChat</strong><br>zhengxiexie</li>\n<li><strong>QQ</strong><br>373618217</li>\n<li><strong>Blog</strong><br><a href=\"https://zhengxiexie.github.io/\">https://zhengxiexie.github.io/</a></li>\n</ul>\n","site":{"data":{}},"excerpt":"","more":"<img style=\"position:relative;right:30px;float:right\" src=\"/medias/pic/2.jpg\" width=\"15%\" height=\"48%\">\n\n<h1 id=\"Keywords\"><a href=\"#Keywords\" class=\"headerlink\" title=\"Keywords\"></a>Keywords</h1><ul>\n<li><strong>TL;DR</strong><br>Chinese Name: Xie, Zheng<br>English Name: Ben<br>Birthday: 1989.5.12<br>Good at English and Chinese. <a href=\"https://music.163.com/dj?id=2059907935&userid=52336738\" target=\"_blank\" rel=\"noopener\">listen</a>.<br>Worked in Baidu, Xiaomi, Tencent, VMware, and other top-tier Internet companies, and is familiar with mainstream Internet technologies.<br>Has 10 years of experience.<br>Like distributed technologies, my paper <em>A Brief Discussion on CAP and Paxos Consensus Algorithm</em> was selected as one of Tencent’s external technical engineering anthologies. <a href=\"https://mp.weixin.qq.com/s/Fj4zERz9PEuNumd_SI0bEA\" target=\"_blank\" rel=\"noopener\">link</a>.<br>Passionate about innovation and published patents at VMware <em>VMWI609.WO-NAMED PORT SECURITY POLICY–A MORE FLEXIBLE TRAFFIC ISOLATION SOLUTION</em>.</li>\n</ul>\n<h1 id=\"Skills\"><a href=\"#Skills\" class=\"headerlink\" title=\"Skills\"></a>Skills</h1><ul>\n<li><strong>TL;DR</strong><br>Python/C/C++/PHP/Golang. Docker, Linux/Unix Zookeeper/SQS<br>TCP/IP/HTTP/gRPC, Mysql/Redis/MongoDB, AWS/vSphere/NSX-T<br>Distributed System Development<br>Mainstream web technology</li>\n</ul>\n<h1 id=\"Highlights\"><a href=\"#Highlights\" class=\"headerlink\" title=\"Highlights\"></a>Highlights</h1><ul>\n<li><strong>TL;DR</strong><br>Experience with the world’s top 500 Internet companies for 10 years<br>Experience of the Chinese top 3 Internet companies for 3 years<br>Good at English speaking and writing<br>Fast learning ability</li>\n</ul>\n<h1 id=\"Education\"><a href=\"#Education\" class=\"headerlink\" title=\"Education\"></a>Education</h1><ul>\n<li><p><strong>Bachelor of Computer Science and Technology</strong> </p>\n<p> Zhejiang University of Technology<br> 2008/09 - 2012/06</p>\n</li>\n</ul>\n<h1 id=\"Company-Experience\"><a href=\"#Company-Experience\" class=\"headerlink\" title=\"Company Experience\"></a>Company Experience</h1><h3 id=\"2021-4-Now\"><a href=\"#2021-4-Now\" class=\"headerlink\" title=\"2021.4 - Now\"></a>2021.4 - Now</h3><ul>\n<li><strong>VMware JIL in vSphere k8s drivers Member of Technical Staff</strong></li>\n</ul>\n<ol>\n<li>Responsible for the development of the company’s core products vSphere, NSX-T network components, especially the architecture design of K8S and NSX-T interoperability component CNI <a href=\"https://github.com/vmware-tanzu/nsx-operator.git\" target=\"_blank\" rel=\"noopener\">nsx-operator</a>.</li>\n</ol>\n<h3 id=\"2019-4-2021-4\"><a href=\"#2019-4-2021-4\" class=\"headerlink\" title=\"2019.4 - 2021.4\"></a>2019.4 - 2021.4</h3><ul>\n<li><strong>Senior engineer of Tencent cloud network group</strong></li>\n</ul>\n<ol>\n<li>Responsible for background development of Tencent Cloud VPC(virtual private cloud) network controller, VPC is the exclusive network space built based on Tencent Cloud, providing network services or resources. There is complete logical isolation between different private networks. You can customize the network environment, routing table, security policy, etc. At the same time, private networks support multiple ways to connect to the Internet, other VPCs, and local data centers, enabling easy deployment of networks in the cloud. The private cloud network is the core of the entire Tencent cloud network, and the controller is responsible for distributing hundreds of thousands of physical machines and gateway flow tables. Now Tencent Cloud operates 25 geographic regions and 53 available areas. At the controller level, the Mysql storage flow table is adopted, ZooKeeper is used as middleware to actively inform the physical machine and gateway to send and receive data, and custom protocol or Protobuf protocol is used for data communication with DPDK or Netlink.</li>\n<li>Responsible for background development of the control level of basic network security group. The security group is a virtual firewall with a stateful packet filtering function. It is used to set the network access control of the cloud server, load balancing, cloud database, and other instances, and control the in-out traffic at the instance level. It is an important may of network security isolation. Like the private cloud network controller, ZooKeeper is also adopted as the middleware notification security policy, and the physical machine uses the kernel NetFilter Framework to filter packets.</li>\n<li>Responsible for auto-testing cases for controller components.</li>\n</ol>\n<h3 id=\"2018-8-2019-4\"><a href=\"#2018-8-2019-4\" class=\"headerlink\" title=\"2018.8 - 2019.4\"></a>2018.8 - 2019.4</h3><ul>\n<li><strong>Senior engineer of SHAREit</strong></li>\n</ul>\n<ol>\n<li>Responsible for large-scale crawling of YouTube videos, changing the original stand-alone mode to distributed crawling AWS EC2 Autoscaling cluster is used to implement consumer competitive crawling and parsing of data, Mysql is used to store keyword crawling progress and number, Redis bitmap is used to implement Bloom filters for duplicated videos. AWS SQS is used to implement message queue buffering, and Dynamodb is used to implement underlying storage. AWS Lambda is used to trigger ElasticSearch index synchronization and support the server query. Improve the original data volume of less than 10,000 a day to 200,000 a day, DAU reaches 30 million in India and 10 million in Non-India.</li>\n<li>Responsible for the CDN address parsing of YouTube video source and storage of the clients-sourcing analysis, receiving 20,000 data per second from the client. Use the AWS Aurora database to store links that are parsed by the server and uploaded by the client Supports storage by country and city dimensions. Redis distributed locks are used to coordinate consumer competition for resources and prevent duplicate parsing. Timely remove expired links, timely detect 302-jump links and their availability, increase the rate of link release from the original less than 30/% to 99.99/%, and increase the success rate of the link to 80%. Further optimization is carried out to reduce the number of instances from 100 to 50. This project is awarded as the annual excellent project by the company.</li>\n</ol>\n<h3 id=\"2015-10-2018-8\"><a href=\"#2015-10-2018-8\" class=\"headerlink\" title=\"2015.10 - 2018.8\"></a>2015.10 - 2018.8</h3><ul>\n<li><strong>Senior engineer of Xiaomi TV</strong></li>\n</ul>\n<ol>\n<li>Mobile Pictorial is a built-in application for Xiaomi mobile phones, with an entrance that allows users to choose to open or close it. Participated in the design of the background architecture and operation platform, and the joint of Xiaomi recommendation system and data factory The master and slave MySQL is used as the underlying database for the Django operation platform to release data to Redis. Nginx does load balancing and distributes requests to the Tornado process in the background. Tornado is responsible for responding to Redis data to the client, and QPS reaches 5K.</li>\n<li>Mobile video realizes the function of watching TV series. Once a user subscribes to a new TV series, it will automatically dock with the Xiaomi push system to notify the user. The client registers the Topic with the EPISODE ID on the PUSH system, and the server regularly detects Whether there are new episodes, while the POST request pushes the system and sends notifications to the client.</li>\n<li>Currently, Xiaomi TV has sold 10 million sets in China, with QPS reaching 20,000. However, due to the aggregation of CP resources from all parties, it often crashes when playing videos and browsing data. To timely understand and record the client error log, the report barrier platform is designed independently Multi-producer and multi-consumer models are adopted for development, and the Kestrel message queue of Twitter is introduced to access Xiaomi Cloud FDS. OpenFalcon operation and maintenance monitoring are added to monitor the queue situation and request status in real-time. Asynchronous multiple Tornado process to accept the client from the compressed log data, and promptly return to the client the reported barrier ID, the log maximum size reaches 100k, the log data is sent to the Kestrel message queue, multiple consumers process to read data from the queue, write the FDS, and will return to the log after the FDS download link along with other metadata, improve the stability of the play resources. Since the Kestrel Python client is prone to fetch the same data when fetching data with high concurrency, distributed locking is introduced to solve this problem.</li>\n<li>PatChWall is the core business of Xiaomi TV. It is the place with the most user experience and also the main business. To expand its international business, Xiaomi TV cooperated with Google to develop ATV(Android TV), expanded into the markets of India, Indonesia, and Russia, and connected to more than 10 local CPs. Regarding Xiaomi TV background architecture, developed and deployed international business. The Service API uses the Python Tornado framework, the search engine uses Solr, the cache layer uses Redis consistent Hash, and the persistence layer uses the master-slave Mysql and Redis. The operating system is based on Django Admin, and it supports multiple languages. Combined with local laws and other special circumstances, start multiprocessor, for all posters processed into a uniform format, plus the effect of mask and edge blur. The international version of the code is called II8N CNS, il8N Service. In different countries, because we provide the platform, I proposed the scheme, using a set of the same code, but different configurations according to different countries with multiple sets of data, each country deployed an independent room, in this way, for the development, you just need to change a code. Data standardization also saves docking costs.</li>\n<li>Independently develop the function of apt upgrade. Calculating the time window according to the current time percentage, and calculating whether it falls Into the time window according to the hash value of the device id of the TV, saves bandwidth cost, gray level upgrade principle is adopted.</li>\n</ol>\n<h3 id=\"2014-8-2015-10\"><a href=\"#2014-8-2015-10\" class=\"headerlink\" title=\"2014.8 - 2015.10\"></a>2014.8 - 2015.10</h3><ul>\n<li><strong>Engineer of Knownsec</strong></li>\n</ul>\n<ol>\n<li>Monitor hacker attacks on Chinese government websites through crawlers, and provide alarm information to public security departments timely.</li>\n<li>Responsible for the back-end system of the star map project, which stored the vulnerability information of the website Since there is no self-built CDN, GridFS is adopted to store static data such as images.</li>\n</ol>\n<h3 id=\"2013-2-2014-8\"><a href=\"#2013-2-2014-8\" class=\"headerlink\" title=\"2013.2 - 2014.8\"></a>2013.2 - 2014.8</h3><ul>\n<li><strong>Engineer of Baidu Mobile</strong></li>\n</ul>\n<ol>\n<li>The main business is mobile games and application distribution. The background mainly uses C++ language and the UB framework developed by Baidu to provide interfaces for clients and the middle tier to support various businesses. QPS up to 3k.</li>\n<li>Independently develop the chess and card hall project, and design the activity of users competing for raffle tickets. Background Nginx and Openresty filter request flow, multiple application servers to implement application logic, lottery storage in Redis, using Redis transaction function and atomic operation to achieve inventory addition and subtraction.</li>\n<li>MySQL stores resource data and MongoDB is responsible for interface data.</li>\n</ol>\n<h3 id=\"2012-10-2013-2\"><a href=\"#2012-10-2013-2\" class=\"headerlink\" title=\"2012.10 - 2013.2\"></a>2012.10 - 2013.2</h3><ul>\n<li><strong>Engineer of Hundsun electronic bank</strong><br>Responsible for the development of low counter of bank financial management sales system.</li>\n</ul>\n<h1 id=\"Contact\"><a href=\"#Contact\" class=\"headerlink\" title=\"Contact\"></a>Contact</h1><ul>\n<li><strong>Email</strong><br><a href=\"mailto:[email protected]\" target=\"_blank\" rel=\"noopener\">[email protected]</a></li>\n<li><strong>WeChat</strong><br>zhengxiexie</li>\n<li><strong>QQ</strong><br>373618217</li>\n<li><strong>Blog</strong><br><a href=\"https://zhengxiexie.github.io/\">https://zhengxiexie.github.io/</a></li>\n</ul>\n"},{"title":"archives","date":"2019-07-19T08:39:20.000Z","type":"archives","layout":"archives","_content":"","source":"archives/index.md","raw":"---\ntitle: archives\ndate: 2019-07-19 16:39:20\ntype: \"archives\"\nlayout: \"archives\"\n---","updated":"2022-11-18T07:58:21.558Z","path":"archives/index.html","comments":1,"_id":"clcvfoh2p000350pqk1h3cay9","content":"","site":{"data":{}},"excerpt":"","more":""},{"title":"about","date":"2019-07-19T08:41:10.000Z","type":"about","layout":"about","_content":"\n<img style=\"position:relative;right:100px;float:right\" src=\"/medias/pic/2.jpg\" width=\"15%\" height=\"48%\">\n\n# 个人简介\n中文名:郑勰(xié)\n英文名:Ben\n生日:1989.5.12\n中英文听说读写良好[试听](https://music.163.com/dj?id=2059907935&userid=52336738)。\n先后在百度、小米、腾讯、VMware等一线互联网公司工作,熟系互联网主流技术,行业经验 10 年。\n喜欢分布式技术,撰写的文章《浅谈 CAP 和 Paxos 共识算法》曾入选腾讯对外技术工程文集[链接](https://mp.weixin.qq.com/s/Fj4zERz9PEuNumd_SI0bEA)。\n热爱创新,在VMware发布专利《VMWI609.WO-NAMED PORT SECURITY POLICY--A MORE FLEXIBLE TRAFFIC ISOLATION SOLUTION》。\n\n# 教育经历\n* <b>本科 计算机科学与技术</b>\n浙江工业大学\n2008/09 - 2012/06\n\n# 公司经历\n### 2021.4 - 至今\n* <b>VMware JIL in vSphere k8s drivers Member of Technical Staff</b>\n1. 负责公司核心产品 vSphere、NSX-T网络组件的开发,尤其是K8S和NSX-T互通组件CNI [nsx-operator](https://github.com/vmware-tanzu/nsx-operator.git)的架构设计。\n\n### 2019.4 - 2021.4\n* <b>腾讯 腾讯云网络产品组 高级开发工程师</b>\n1. 负责腾讯云私有云网络控制器层面的后台开发。私有网络(Virtual Private Cloud,VPC)是基于腾讯云构建的专属云上网络空间,为腾讯云上的资源提供网络服务,不同私有网络间完全逻辑隔离。可以自定义网络环境、路由表、安全策略等;同时,私有网络支持多种方式连接 Internet、连接其他 VPC、连接本地数据中心,助力轻松部署云上网络。私有云网络是整个腾讯云网络的核心,控制器负责下发数十万台物理机和网关流表。目前腾讯云在全球 25 个地理区域内运营着 53 个可用区,且在计算和网络领域已经迈入“双百时代”(全网服务器总数量突破100万台,带宽峰值突破100T),如何高效、弹性、成本低的实现网络资源的互联互通,是一个充满挑战的课题。控制器层面采用 Mysql 存储流表,zookeeper 作为中间件主动通知物理机和网关收发数据,采用自定义协议或者 protobuf 协议和 dpdk 或者 kernel 数据面做数据互通。\n2. 负责基础网络安全组控制层面的后台开发。安全组即虚拟防火墙,具备有状态的数据包过滤功能,用于设置云服务器、负载均衡、云数据库等实例的网络访问控制,控制实例级别的出入流量,是重要的网络安全隔离手段。同私有云网络控制器一样,也是采用 zookeeper 作为中间件通知安全策略,物理机用内核 netfilter framework封包过滤。\n\n### 2018.8 - 2019.4\n* <b>SHAREit 研发部 后端高级开发工程师</b>\n1. 负责Youtube视频大规模爬取,由原来的单机模式改为分布式爬取。利用 AWS EC2 AutoScaling 集群实现消费者竞争爬取数据和解析, 利用 Mysql 储存关键词爬取进度及数目,利用 Redis 位图实现布隆过滤器进行排重,利用 AWS SQS 实现消息队列缓冲,利用 Dynamodb 实现底层存储,利用 AWS Lambda 实现和ElasticSearch索引同步并提供给服务端查询。由最初的每天不到一万的数据量提升至每天二十万,数据总量达到三千万。DAU日活印度地区两千万,非印地区一千万。\n2. 负责Youtube服务端视频源CDN地址解析和客户端众包解析入库,每秒从客户端接收数据量达到2万。利用AWS Aurora数据库存储由服务端解析的链接和客户端上传的链接。支持按国家及城市维度存储。 利用 Redis 分布式锁协调消费者竞争资源,防止重复解析。及时清除过期链接,及时检测302跳转链接和合法性,将链接下发的比率由原来的不到30%提高到四个九,将链接播放秒半成功率提高到80%。后续继续优化方案,将实例数目由原来的100台减少至一半。此项目被公司评为年度优秀项目。\n\n### 2015.10 - 2018.8\n* <b>小米 小米电视 服务端高级开发工程师</b>\n1. 手机画报是小米手机内置应用,有入口让用户可以选择打开或者关闭。参与设计了后台架构和运营平台,对接了小米推荐系统和数据工厂。主备MySQL作为底层数据库供Django运营平台使用,运营发布数据至Redis,Nginx做负载均衡和反响代理,将请求分发后台Tornado进程,Tornado负责将Redis数据响应给客户端,QPS达到5k。\n2. 手机视频实现追剧功能。一旦用户订阅的电视剧有更新,自动对接小米推送系统通知用户。客户端在推送系统上以剧集id注册Topic,服务端定时检测是否有新剧集,有则POST请求推送系统,发PUSH到客户端通知。\n3. 小米电视目前在国内销售1000万台,QPS达到两万,但是因为是聚合各方CP资源,在播放视频和浏览数据的时候,经常发生崩溃情况。为了及时了解并记录客户端错误日志,独立设计了报障平台。采用多生产者,多消费者模型开发,并引入Twitter的Kestrel消息队列,接入小米融合云FDS,并加入了OpenFalcon运维监控,实时监控队列情况和请求状况。多个Tornado进程异步接受客户端传来的压缩后的log数据,并及时返回客户端报障ID,log数据最大100k,被发送到Kestrel消息队列后,多个消费者进程从队列读取数据,写入FDS,并将FDS返回后的日志下载链接连同一条报障日志的其他元数据,一起写入运营系统,供客服和开发排查问题,提高播放资源的稳定性。由于Kestrel Python客户端在取数据的时候,并发量高时,容易发生取到同样数据的情况,所以引入分布式锁,解决这类问题。\n4. PatchWall是小米电视核心业务,是用户感受最多的地方,也是主营业务。为了拓展国际化业务,小米电视和Google合作开发ATV(Android TV),开拓进印度、印尼、俄罗斯市场,接入了当地十多家CP。参考国内小米电视后台架构,开发并部署了国际化业务。Service API 利用Python Tornado框架, 搜索引擎采用Solr,缓存层利用Redis 一致性Hash,持久层用到主备模型Mysql和Redis。运营系统基于Django Admin,支持多国语言。结合当地法律等特殊情况,开启多进程,针对所有海报处理成统一格式,加上蒙层和边缘模糊效果。国际版代码称为i18n_cms,i18n_service。针对于不同国家,因为我们是做平台,我拟定方案,代码用一套,代码中的配置信息根据不同国家采用不同配置,数据用多套,即每个国家使用各自独立的数据,每个国家部署独立的机房,这样,对于开发,只需要改一次代码即可。数据标准化,也节省对接成本。\n5. 独立开发电视后台APK的触发升级和灰度升级功能,针对电视型号、用户级别、电视系统采用不同的升级策略。为了节省带宽成本,采用灰度升级,灰度升级原理,设置灰度时间范围,按照当前时间的百分比,算出时间窗,根据电视的deviceid的hash值算出是否落入时间窗范围内。\n\n### 2014.8 - 2015.10\n* <b>知道创宇 研发部 开发工程师</b>\n1. 通过爬虫监控黑客攻击中国政府网站信息,及时给公安部门提供报警信息。\n2. 负责星图项目后端系统,后端存储网站漏洞信息,因为没有自建CDN,所以采用GridFS存储图片等静态数据。\n\n\n### 2013.2 - 2014.8\n* <b>百度 移动游戏 RD</b>\n1. 主营业务是移动游戏和应用分发,后台主要用C++语言,利用百度自主研发的UB框架,给客户端和中间层提供接口,支持各种业务。QPS达到3k。\n2. 独立开发棋牌大厅项目,设计用户抢对奖券活动。后台Nginx+Openresty过滤请求流,多台应用server实现应用逻辑,对奖券存储在Redis,利用Redis的事务功能和原子操作实现库存加减。\n3. MySQL存储资源数据,MongoDB负责接口数据。\n\n\n### 2012.10 - 2013.2\n* <b>恒生电子 银行事业部 C后端开发工程师</b>\n负责银行理财销售系统低柜开发。\n\n\n# 联系方式\n* <b>电子邮箱</b>\[email protected]\n* <b>微信</b>\nzhengxiexie\n* <b>QQ</b>\n373618217\n* <b>个人博客</b>\nhttps://zhengxiexie.github.io/\n","source":"about/index.md","raw":"---\ntitle: about\ndate: 2019-07-19 16:41:10\ntype: \"about\"\nlayout: \"about\"\n---\n\n<img style=\"position:relative;right:100px;float:right\" src=\"/medias/pic/2.jpg\" width=\"15%\" height=\"48%\">\n\n# 个人简介\n中文名:郑勰(xié)\n英文名:Ben\n生日:1989.5.12\n中英文听说读写良好[试听](https://music.163.com/dj?id=2059907935&userid=52336738)。\n先后在百度、小米、腾讯、VMware等一线互联网公司工作,熟系互联网主流技术,行业经验 10 年。\n喜欢分布式技术,撰写的文章《浅谈 CAP 和 Paxos 共识算法》曾入选腾讯对外技术工程文集[链接](https://mp.weixin.qq.com/s/Fj4zERz9PEuNumd_SI0bEA)。\n热爱创新,在VMware发布专利《VMWI609.WO-NAMED PORT SECURITY POLICY--A MORE FLEXIBLE TRAFFIC ISOLATION SOLUTION》。\n\n# 教育经历\n* <b>本科 计算机科学与技术</b>\n浙江工业大学\n2008/09 - 2012/06\n\n# 公司经历\n### 2021.4 - 至今\n* <b>VMware JIL in vSphere k8s drivers Member of Technical Staff</b>\n1. 负责公司核心产品 vSphere、NSX-T网络组件的开发,尤其是K8S和NSX-T互通组件CNI [nsx-operator](https://github.com/vmware-tanzu/nsx-operator.git)的架构设计。\n\n### 2019.4 - 2021.4\n* <b>腾讯 腾讯云网络产品组 高级开发工程师</b>\n1. 负责腾讯云私有云网络控制器层面的后台开发。私有网络(Virtual Private Cloud,VPC)是基于腾讯云构建的专属云上网络空间,为腾讯云上的资源提供网络服务,不同私有网络间完全逻辑隔离。可以自定义网络环境、路由表、安全策略等;同时,私有网络支持多种方式连接 Internet、连接其他 VPC、连接本地数据中心,助力轻松部署云上网络。私有云网络是整个腾讯云网络的核心,控制器负责下发数十万台物理机和网关流表。目前腾讯云在全球 25 个地理区域内运营着 53 个可用区,且在计算和网络领域已经迈入“双百时代”(全网服务器总数量突破100万台,带宽峰值突破100T),如何高效、弹性、成本低的实现网络资源的互联互通,是一个充满挑战的课题。控制器层面采用 Mysql 存储流表,zookeeper 作为中间件主动通知物理机和网关收发数据,采用自定义协议或者 protobuf 协议和 dpdk 或者 kernel 数据面做数据互通。\n2. 负责基础网络安全组控制层面的后台开发。安全组即虚拟防火墙,具备有状态的数据包过滤功能,用于设置云服务器、负载均衡、云数据库等实例的网络访问控制,控制实例级别的出入流量,是重要的网络安全隔离手段。同私有云网络控制器一样,也是采用 zookeeper 作为中间件通知安全策略,物理机用内核 netfilter framework封包过滤。\n\n### 2018.8 - 2019.4\n* <b>SHAREit 研发部 后端高级开发工程师</b>\n1. 负责Youtube视频大规模爬取,由原来的单机模式改为分布式爬取。利用 AWS EC2 AutoScaling 集群实现消费者竞争爬取数据和解析, 利用 Mysql 储存关键词爬取进度及数目,利用 Redis 位图实现布隆过滤器进行排重,利用 AWS SQS 实现消息队列缓冲,利用 Dynamodb 实现底层存储,利用 AWS Lambda 实现和ElasticSearch索引同步并提供给服务端查询。由最初的每天不到一万的数据量提升至每天二十万,数据总量达到三千万。DAU日活印度地区两千万,非印地区一千万。\n2. 负责Youtube服务端视频源CDN地址解析和客户端众包解析入库,每秒从客户端接收数据量达到2万。利用AWS Aurora数据库存储由服务端解析的链接和客户端上传的链接。支持按国家及城市维度存储。 利用 Redis 分布式锁协调消费者竞争资源,防止重复解析。及时清除过期链接,及时检测302跳转链接和合法性,将链接下发的比率由原来的不到30%提高到四个九,将链接播放秒半成功率提高到80%。后续继续优化方案,将实例数目由原来的100台减少至一半。此项目被公司评为年度优秀项目。\n\n### 2015.10 - 2018.8\n* <b>小米 小米电视 服务端高级开发工程师</b>\n1. 手机画报是小米手机内置应用,有入口让用户可以选择打开或者关闭。参与设计了后台架构和运营平台,对接了小米推荐系统和数据工厂。主备MySQL作为底层数据库供Django运营平台使用,运营发布数据至Redis,Nginx做负载均衡和反响代理,将请求分发后台Tornado进程,Tornado负责将Redis数据响应给客户端,QPS达到5k。\n2. 手机视频实现追剧功能。一旦用户订阅的电视剧有更新,自动对接小米推送系统通知用户。客户端在推送系统上以剧集id注册Topic,服务端定时检测是否有新剧集,有则POST请求推送系统,发PUSH到客户端通知。\n3. 小米电视目前在国内销售1000万台,QPS达到两万,但是因为是聚合各方CP资源,在播放视频和浏览数据的时候,经常发生崩溃情况。为了及时了解并记录客户端错误日志,独立设计了报障平台。采用多生产者,多消费者模型开发,并引入Twitter的Kestrel消息队列,接入小米融合云FDS,并加入了OpenFalcon运维监控,实时监控队列情况和请求状况。多个Tornado进程异步接受客户端传来的压缩后的log数据,并及时返回客户端报障ID,log数据最大100k,被发送到Kestrel消息队列后,多个消费者进程从队列读取数据,写入FDS,并将FDS返回后的日志下载链接连同一条报障日志的其他元数据,一起写入运营系统,供客服和开发排查问题,提高播放资源的稳定性。由于Kestrel Python客户端在取数据的时候,并发量高时,容易发生取到同样数据的情况,所以引入分布式锁,解决这类问题。\n4. PatchWall是小米电视核心业务,是用户感受最多的地方,也是主营业务。为了拓展国际化业务,小米电视和Google合作开发ATV(Android TV),开拓进印度、印尼、俄罗斯市场,接入了当地十多家CP。参考国内小米电视后台架构,开发并部署了国际化业务。Service API 利用Python Tornado框架, 搜索引擎采用Solr,缓存层利用Redis 一致性Hash,持久层用到主备模型Mysql和Redis。运营系统基于Django Admin,支持多国语言。结合当地法律等特殊情况,开启多进程,针对所有海报处理成统一格式,加上蒙层和边缘模糊效果。国际版代码称为i18n_cms,i18n_service。针对于不同国家,因为我们是做平台,我拟定方案,代码用一套,代码中的配置信息根据不同国家采用不同配置,数据用多套,即每个国家使用各自独立的数据,每个国家部署独立的机房,这样,对于开发,只需要改一次代码即可。数据标准化,也节省对接成本。\n5. 独立开发电视后台APK的触发升级和灰度升级功能,针对电视型号、用户级别、电视系统采用不同的升级策略。为了节省带宽成本,采用灰度升级,灰度升级原理,设置灰度时间范围,按照当前时间的百分比,算出时间窗,根据电视的deviceid的hash值算出是否落入时间窗范围内。\n\n### 2014.8 - 2015.10\n* <b>知道创宇 研发部 开发工程师</b>\n1. 通过爬虫监控黑客攻击中国政府网站信息,及时给公安部门提供报警信息。\n2. 负责星图项目后端系统,后端存储网站漏洞信息,因为没有自建CDN,所以采用GridFS存储图片等静态数据。\n\n\n### 2013.2 - 2014.8\n* <b>百度 移动游戏 RD</b>\n1. 主营业务是移动游戏和应用分发,后台主要用C++语言,利用百度自主研发的UB框架,给客户端和中间层提供接口,支持各种业务。QPS达到3k。\n2. 独立开发棋牌大厅项目,设计用户抢对奖券活动。后台Nginx+Openresty过滤请求流,多台应用server实现应用逻辑,对奖券存储在Redis,利用Redis的事务功能和原子操作实现库存加减。\n3. MySQL存储资源数据,MongoDB负责接口数据。\n\n\n### 2012.10 - 2013.2\n* <b>恒生电子 银行事业部 C后端开发工程师</b>\n负责银行理财销售系统低柜开发。\n\n\n# 联系方式\n* <b>电子邮箱</b>\[email protected]\n* <b>微信</b>\nzhengxiexie\n* <b>QQ</b>\n373618217\n* <b>个人博客</b>\nhttps://zhengxiexie.github.io/\n","updated":"2023-01-07T13:12:07.467Z","path":"about/index.html","comments":1,"_id":"clcvfoh3o000s50pq11nsj3vj","content":"<img style=\"position:relative;right:100px;float:right\" src=\"/medias/pic/2.jpg\" width=\"15%\" height=\"48%\">\n\n<h1 id=\"个人简介\"><a href=\"#个人简介\" class=\"headerlink\" title=\"个人简介\"></a>个人简介</h1><p>中文名:郑勰(xié)<br>英文名:Ben<br>生日:1989.5.12<br>中英文听说读写良好<a href=\"https://music.163.com/dj?id=2059907935&userid=52336738\" target=\"_blank\" rel=\"noopener\">试听</a>。<br>先后在百度、小米、腾讯、VMware等一线互联网公司工作,熟系互联网主流技术,行业经验 10 年。<br>喜欢分布式技术,撰写的文章《浅谈 CAP 和 Paxos 共识算法》曾入选腾讯对外技术工程文集<a href=\"https://mp.weixin.qq.com/s/Fj4zERz9PEuNumd_SI0bEA\" target=\"_blank\" rel=\"noopener\">链接</a>。<br>热爱创新,在VMware发布专利《VMWI609.WO-NAMED PORT SECURITY POLICY–A MORE FLEXIBLE TRAFFIC ISOLATION SOLUTION》。</p>\n<h1 id=\"教育经历\"><a href=\"#教育经历\" class=\"headerlink\" title=\"教育经历\"></a>教育经历</h1><ul>\n<li><b>本科 计算机科学与技术</b><br>浙江工业大学<br>2008/09 - 2012/06</li>\n</ul>\n<h1 id=\"公司经历\"><a href=\"#公司经历\" class=\"headerlink\" title=\"公司经历\"></a>公司经历</h1><h3 id=\"2021-4-至今\"><a href=\"#2021-4-至今\" class=\"headerlink\" title=\"2021.4 - 至今\"></a>2021.4 - 至今</h3><ul>\n<li><b>VMware JIL in vSphere k8s drivers Member of Technical Staff</b></li>\n</ul>\n<ol>\n<li>负责公司核心产品 vSphere、NSX-T网络组件的开发,尤其是K8S和NSX-T互通组件CNI <a href=\"https://github.com/vmware-tanzu/nsx-operator.git\" target=\"_blank\" rel=\"noopener\">nsx-operator</a>的架构设计。</li>\n</ol>\n<h3 id=\"2019-4-2021-4\"><a href=\"#2019-4-2021-4\" class=\"headerlink\" title=\"2019.4 - 2021.4\"></a>2019.4 - 2021.4</h3><ul>\n<li><b>腾讯 腾讯云网络产品组 高级开发工程师</b></li>\n</ul>\n<ol>\n<li>负责腾讯云私有云网络控制器层面的后台开发。私有网络(Virtual Private Cloud,VPC)是基于腾讯云构建的专属云上网络空间,为腾讯云上的资源提供网络服务,不同私有网络间完全逻辑隔离。可以自定义网络环境、路由表、安全策略等;同时,私有网络支持多种方式连接 Internet、连接其他 VPC、连接本地数据中心,助力轻松部署云上网络。私有云网络是整个腾讯云网络的核心,控制器负责下发数十万台物理机和网关流表。目前腾讯云在全球 25 个地理区域内运营着 53 个可用区,且在计算和网络领域已经迈入“双百时代”(全网服务器总数量突破100万台,带宽峰值突破100T),如何高效、弹性、成本低的实现网络资源的互联互通,是一个充满挑战的课题。控制器层面采用 Mysql 存储流表,zookeeper 作为中间件主动通知物理机和网关收发数据,采用自定义协议或者 protobuf 协议和 dpdk 或者 kernel 数据面做数据互通。</li>\n<li>负责基础网络安全组控制层面的后台开发。安全组即虚拟防火墙,具备有状态的数据包过滤功能,用于设置云服务器、负载均衡、云数据库等实例的网络访问控制,控制实例级别的出入流量,是重要的网络安全隔离手段。同私有云网络控制器一样,也是采用 zookeeper 作为中间件通知安全策略,物理机用内核 netfilter framework封包过滤。</li>\n</ol>\n<h3 id=\"2018-8-2019-4\"><a href=\"#2018-8-2019-4\" class=\"headerlink\" title=\"2018.8 - 2019.4\"></a>2018.8 - 2019.4</h3><ul>\n<li><b>SHAREit 研发部 后端高级开发工程师</b></li>\n</ul>\n<ol>\n<li>负责Youtube视频大规模爬取,由原来的单机模式改为分布式爬取。利用 AWS EC2 AutoScaling 集群实现消费者竞争爬取数据和解析, 利用 Mysql 储存关键词爬取进度及数目,利用 Redis 位图实现布隆过滤器进行排重,利用 AWS SQS 实现消息队列缓冲,利用 Dynamodb 实现底层存储,利用 AWS Lambda 实现和ElasticSearch索引同步并提供给服务端查询。由最初的每天不到一万的数据量提升至每天二十万,数据总量达到三千万。DAU日活印度地区两千万,非印地区一千万。</li>\n<li>负责Youtube服务端视频源CDN地址解析和客户端众包解析入库,每秒从客户端接收数据量达到2万。利用AWS Aurora数据库存储由服务端解析的链接和客户端上传的链接。支持按国家及城市维度存储。 利用 Redis 分布式锁协调消费者竞争资源,防止重复解析。及时清除过期链接,及时检测302跳转链接和合法性,将链接下发的比率由原来的不到30%提高到四个九,将链接播放秒半成功率提高到80%。后续继续优化方案,将实例数目由原来的100台减少至一半。此项目被公司评为年度优秀项目。</li>\n</ol>\n<h3 id=\"2015-10-2018-8\"><a href=\"#2015-10-2018-8\" class=\"headerlink\" title=\"2015.10 - 2018.8\"></a>2015.10 - 2018.8</h3><ul>\n<li><b>小米 小米电视 服务端高级开发工程师</b></li>\n</ul>\n<ol>\n<li>手机画报是小米手机内置应用,有入口让用户可以选择打开或者关闭。参与设计了后台架构和运营平台,对接了小米推荐系统和数据工厂。主备MySQL作为底层数据库供Django运营平台使用,运营发布数据至Redis,Nginx做负载均衡和反响代理,将请求分发后台Tornado进程,Tornado负责将Redis数据响应给客户端,QPS达到5k。</li>\n<li>手机视频实现追剧功能。一旦用户订阅的电视剧有更新,自动对接小米推送系统通知用户。客户端在推送系统上以剧集id注册Topic,服务端定时检测是否有新剧集,有则POST请求推送系统,发PUSH到客户端通知。</li>\n<li>小米电视目前在国内销售1000万台,QPS达到两万,但是因为是聚合各方CP资源,在播放视频和浏览数据的时候,经常发生崩溃情况。为了及时了解并记录客户端错误日志,独立设计了报障平台。采用多生产者,多消费者模型开发,并引入Twitter的Kestrel消息队列,接入小米融合云FDS,并加入了OpenFalcon运维监控,实时监控队列情况和请求状况。多个Tornado进程异步接受客户端传来的压缩后的log数据,并及时返回客户端报障ID,log数据最大100k,被发送到Kestrel消息队列后,多个消费者进程从队列读取数据,写入FDS,并将FDS返回后的日志下载链接连同一条报障日志的其他元数据,一起写入运营系统,供客服和开发排查问题,提高播放资源的稳定性。由于Kestrel Python客户端在取数据的时候,并发量高时,容易发生取到同样数据的情况,所以引入分布式锁,解决这类问题。</li>\n<li>PatchWall是小米电视核心业务,是用户感受最多的地方,也是主营业务。为了拓展国际化业务,小米电视和Google合作开发ATV(Android TV),开拓进印度、印尼、俄罗斯市场,接入了当地十多家CP。参考国内小米电视后台架构,开发并部署了国际化业务。Service API 利用Python Tornado框架, 搜索引擎采用Solr,缓存层利用Redis 一致性Hash,持久层用到主备模型Mysql和Redis。运营系统基于Django Admin,支持多国语言。结合当地法律等特殊情况,开启多进程,针对所有海报处理成统一格式,加上蒙层和边缘模糊效果。国际版代码称为i18n_cms,i18n_service。针对于不同国家,因为我们是做平台,我拟定方案,代码用一套,代码中的配置信息根据不同国家采用不同配置,数据用多套,即每个国家使用各自独立的数据,每个国家部署独立的机房,这样,对于开发,只需要改一次代码即可。数据标准化,也节省对接成本。</li>\n<li>独立开发电视后台APK的触发升级和灰度升级功能,针对电视型号、用户级别、电视系统采用不同的升级策略。为了节省带宽成本,采用灰度升级,灰度升级原理,设置灰度时间范围,按照当前时间的百分比,算出时间窗,根据电视的deviceid的hash值算出是否落入时间窗范围内。</li>\n</ol>\n<h3 id=\"2014-8-2015-10\"><a href=\"#2014-8-2015-10\" class=\"headerlink\" title=\"2014.8 - 2015.10\"></a>2014.8 - 2015.10</h3><ul>\n<li><b>知道创宇 研发部 开发工程师</b></li>\n</ul>\n<ol>\n<li>通过爬虫监控黑客攻击中国政府网站信息,及时给公安部门提供报警信息。</li>\n<li>负责星图项目后端系统,后端存储网站漏洞信息,因为没有自建CDN,所以采用GridFS存储图片等静态数据。</li>\n</ol>\n<h3 id=\"2013-2-2014-8\"><a href=\"#2013-2-2014-8\" class=\"headerlink\" title=\"2013.2 - 2014.8\"></a>2013.2 - 2014.8</h3><ul>\n<li><b>百度 移动游戏 RD</b></li>\n</ul>\n<ol>\n<li>主营业务是移动游戏和应用分发,后台主要用C++语言,利用百度自主研发的UB框架,给客户端和中间层提供接口,支持各种业务。QPS达到3k。</li>\n<li>独立开发棋牌大厅项目,设计用户抢对奖券活动。后台Nginx+Openresty过滤请求流,多台应用server实现应用逻辑,对奖券存储在Redis,利用Redis的事务功能和原子操作实现库存加减。</li>\n<li>MySQL存储资源数据,MongoDB负责接口数据。</li>\n</ol>\n<h3 id=\"2012-10-2013-2\"><a href=\"#2012-10-2013-2\" class=\"headerlink\" title=\"2012.10 - 2013.2\"></a>2012.10 - 2013.2</h3><ul>\n<li><b>恒生电子 银行事业部 C后端开发工程师</b><br>负责银行理财销售系统低柜开发。</li>\n</ul>\n<h1 id=\"联系方式\"><a href=\"#联系方式\" class=\"headerlink\" title=\"联系方式\"></a>联系方式</h1><ul>\n<li><b>电子邮箱</b><br><a href=\"mailto:[email protected]\" target=\"_blank\" rel=\"noopener\">[email protected]</a></li>\n<li><b>微信</b><br>zhengxiexie</li>\n<li><b>QQ</b><br>373618217</li>\n<li><b>个人博客</b><br><a href=\"https://zhengxiexie.github.io/\">https://zhengxiexie.github.io/</a></li>\n</ul>\n","site":{"data":{}},"excerpt":"","more":"<img style=\"position:relative;right:100px;float:right\" src=\"/medias/pic/2.jpg\" width=\"15%\" height=\"48%\">\n\n<h1 id=\"个人简介\"><a href=\"#个人简介\" class=\"headerlink\" title=\"个人简介\"></a>个人简介</h1><p>中文名:郑勰(xié)<br>英文名:Ben<br>生日:1989.5.12<br>中英文听说读写良好<a href=\"https://music.163.com/dj?id=2059907935&userid=52336738\" target=\"_blank\" rel=\"noopener\">试听</a>。<br>先后在百度、小米、腾讯、VMware等一线互联网公司工作,熟系互联网主流技术,行业经验 10 年。<br>喜欢分布式技术,撰写的文章《浅谈 CAP 和 Paxos 共识算法》曾入选腾讯对外技术工程文集<a href=\"https://mp.weixin.qq.com/s/Fj4zERz9PEuNumd_SI0bEA\" target=\"_blank\" rel=\"noopener\">链接</a>。<br>热爱创新,在VMware发布专利《VMWI609.WO-NAMED PORT SECURITY POLICY–A MORE FLEXIBLE TRAFFIC ISOLATION SOLUTION》。</p>\n<h1 id=\"教育经历\"><a href=\"#教育经历\" class=\"headerlink\" title=\"教育经历\"></a>教育经历</h1><ul>\n<li><b>本科 计算机科学与技术</b><br>浙江工业大学<br>2008/09 - 2012/06</li>\n</ul>\n<h1 id=\"公司经历\"><a href=\"#公司经历\" class=\"headerlink\" title=\"公司经历\"></a>公司经历</h1><h3 id=\"2021-4-至今\"><a href=\"#2021-4-至今\" class=\"headerlink\" title=\"2021.4 - 至今\"></a>2021.4 - 至今</h3><ul>\n<li><b>VMware JIL in vSphere k8s drivers Member of Technical Staff</b></li>\n</ul>\n<ol>\n<li>负责公司核心产品 vSphere、NSX-T网络组件的开发,尤其是K8S和NSX-T互通组件CNI <a href=\"https://github.com/vmware-tanzu/nsx-operator.git\" target=\"_blank\" rel=\"noopener\">nsx-operator</a>的架构设计。</li>\n</ol>\n<h3 id=\"2019-4-2021-4\"><a href=\"#2019-4-2021-4\" class=\"headerlink\" title=\"2019.4 - 2021.4\"></a>2019.4 - 2021.4</h3><ul>\n<li><b>腾讯 腾讯云网络产品组 高级开发工程师</b></li>\n</ul>\n<ol>\n<li>负责腾讯云私有云网络控制器层面的后台开发。私有网络(Virtual Private Cloud,VPC)是基于腾讯云构建的专属云上网络空间,为腾讯云上的资源提供网络服务,不同私有网络间完全逻辑隔离。可以自定义网络环境、路由表、安全策略等;同时,私有网络支持多种方式连接 Internet、连接其他 VPC、连接本地数据中心,助力轻松部署云上网络。私有云网络是整个腾讯云网络的核心,控制器负责下发数十万台物理机和网关流表。目前腾讯云在全球 25 个地理区域内运营着 53 个可用区,且在计算和网络领域已经迈入“双百时代”(全网服务器总数量突破100万台,带宽峰值突破100T),如何高效、弹性、成本低的实现网络资源的互联互通,是一个充满挑战的课题。控制器层面采用 Mysql 存储流表,zookeeper 作为中间件主动通知物理机和网关收发数据,采用自定义协议或者 protobuf 协议和 dpdk 或者 kernel 数据面做数据互通。</li>\n<li>负责基础网络安全组控制层面的后台开发。安全组即虚拟防火墙,具备有状态的数据包过滤功能,用于设置云服务器、负载均衡、云数据库等实例的网络访问控制,控制实例级别的出入流量,是重要的网络安全隔离手段。同私有云网络控制器一样,也是采用 zookeeper 作为中间件通知安全策略,物理机用内核 netfilter framework封包过滤。</li>\n</ol>\n<h3 id=\"2018-8-2019-4\"><a href=\"#2018-8-2019-4\" class=\"headerlink\" title=\"2018.8 - 2019.4\"></a>2018.8 - 2019.4</h3><ul>\n<li><b>SHAREit 研发部 后端高级开发工程师</b></li>\n</ul>\n<ol>\n<li>负责Youtube视频大规模爬取,由原来的单机模式改为分布式爬取。利用 AWS EC2 AutoScaling 集群实现消费者竞争爬取数据和解析, 利用 Mysql 储存关键词爬取进度及数目,利用 Redis 位图实现布隆过滤器进行排重,利用 AWS SQS 实现消息队列缓冲,利用 Dynamodb 实现底层存储,利用 AWS Lambda 实现和ElasticSearch索引同步并提供给服务端查询。由最初的每天不到一万的数据量提升至每天二十万,数据总量达到三千万。DAU日活印度地区两千万,非印地区一千万。</li>\n<li>负责Youtube服务端视频源CDN地址解析和客户端众包解析入库,每秒从客户端接收数据量达到2万。利用AWS Aurora数据库存储由服务端解析的链接和客户端上传的链接。支持按国家及城市维度存储。 利用 Redis 分布式锁协调消费者竞争资源,防止重复解析。及时清除过期链接,及时检测302跳转链接和合法性,将链接下发的比率由原来的不到30%提高到四个九,将链接播放秒半成功率提高到80%。后续继续优化方案,将实例数目由原来的100台减少至一半。此项目被公司评为年度优秀项目。</li>\n</ol>\n<h3 id=\"2015-10-2018-8\"><a href=\"#2015-10-2018-8\" class=\"headerlink\" title=\"2015.10 - 2018.8\"></a>2015.10 - 2018.8</h3><ul>\n<li><b>小米 小米电视 服务端高级开发工程师</b></li>\n</ul>\n<ol>\n<li>手机画报是小米手机内置应用,有入口让用户可以选择打开或者关闭。参与设计了后台架构和运营平台,对接了小米推荐系统和数据工厂。主备MySQL作为底层数据库供Django运营平台使用,运营发布数据至Redis,Nginx做负载均衡和反响代理,将请求分发后台Tornado进程,Tornado负责将Redis数据响应给客户端,QPS达到5k。</li>\n<li>手机视频实现追剧功能。一旦用户订阅的电视剧有更新,自动对接小米推送系统通知用户。客户端在推送系统上以剧集id注册Topic,服务端定时检测是否有新剧集,有则POST请求推送系统,发PUSH到客户端通知。</li>\n<li>小米电视目前在国内销售1000万台,QPS达到两万,但是因为是聚合各方CP资源,在播放视频和浏览数据的时候,经常发生崩溃情况。为了及时了解并记录客户端错误日志,独立设计了报障平台。采用多生产者,多消费者模型开发,并引入Twitter的Kestrel消息队列,接入小米融合云FDS,并加入了OpenFalcon运维监控,实时监控队列情况和请求状况。多个Tornado进程异步接受客户端传来的压缩后的log数据,并及时返回客户端报障ID,log数据最大100k,被发送到Kestrel消息队列后,多个消费者进程从队列读取数据,写入FDS,并将FDS返回后的日志下载链接连同一条报障日志的其他元数据,一起写入运营系统,供客服和开发排查问题,提高播放资源的稳定性。由于Kestrel Python客户端在取数据的时候,并发量高时,容易发生取到同样数据的情况,所以引入分布式锁,解决这类问题。</li>\n<li>PatchWall是小米电视核心业务,是用户感受最多的地方,也是主营业务。为了拓展国际化业务,小米电视和Google合作开发ATV(Android TV),开拓进印度、印尼、俄罗斯市场,接入了当地十多家CP。参考国内小米电视后台架构,开发并部署了国际化业务。Service API 利用Python Tornado框架, 搜索引擎采用Solr,缓存层利用Redis 一致性Hash,持久层用到主备模型Mysql和Redis。运营系统基于Django Admin,支持多国语言。结合当地法律等特殊情况,开启多进程,针对所有海报处理成统一格式,加上蒙层和边缘模糊效果。国际版代码称为i18n_cms,i18n_service。针对于不同国家,因为我们是做平台,我拟定方案,代码用一套,代码中的配置信息根据不同国家采用不同配置,数据用多套,即每个国家使用各自独立的数据,每个国家部署独立的机房,这样,对于开发,只需要改一次代码即可。数据标准化,也节省对接成本。</li>\n<li>独立开发电视后台APK的触发升级和灰度升级功能,针对电视型号、用户级别、电视系统采用不同的升级策略。为了节省带宽成本,采用灰度升级,灰度升级原理,设置灰度时间范围,按照当前时间的百分比,算出时间窗,根据电视的deviceid的hash值算出是否落入时间窗范围内。</li>\n</ol>\n<h3 id=\"2014-8-2015-10\"><a href=\"#2014-8-2015-10\" class=\"headerlink\" title=\"2014.8 - 2015.10\"></a>2014.8 - 2015.10</h3><ul>\n<li><b>知道创宇 研发部 开发工程师</b></li>\n</ul>\n<ol>\n<li>通过爬虫监控黑客攻击中国政府网站信息,及时给公安部门提供报警信息。</li>\n<li>负责星图项目后端系统,后端存储网站漏洞信息,因为没有自建CDN,所以采用GridFS存储图片等静态数据。</li>\n</ol>\n<h3 id=\"2013-2-2014-8\"><a href=\"#2013-2-2014-8\" class=\"headerlink\" title=\"2013.2 - 2014.8\"></a>2013.2 - 2014.8</h3><ul>\n<li><b>百度 移动游戏 RD</b></li>\n</ul>\n<ol>\n<li>主营业务是移动游戏和应用分发,后台主要用C++语言,利用百度自主研发的UB框架,给客户端和中间层提供接口,支持各种业务。QPS达到3k。</li>\n<li>独立开发棋牌大厅项目,设计用户抢对奖券活动。后台Nginx+Openresty过滤请求流,多台应用server实现应用逻辑,对奖券存储在Redis,利用Redis的事务功能和原子操作实现库存加减。</li>\n<li>MySQL存储资源数据,MongoDB负责接口数据。</li>\n</ol>\n<h3 id=\"2012-10-2013-2\"><a href=\"#2012-10-2013-2\" class=\"headerlink\" title=\"2012.10 - 2013.2\"></a>2012.10 - 2013.2</h3><ul>\n<li><b>恒生电子 银行事业部 C后端开发工程师</b><br>负责银行理财销售系统低柜开发。</li>\n</ul>\n<h1 id=\"联系方式\"><a href=\"#联系方式\" class=\"headerlink\" title=\"联系方式\"></a>联系方式</h1><ul>\n<li><b>电子邮箱</b><br><a href=\"mailto:[email protected]\" target=\"_blank\" rel=\"noopener\">[email protected]</a></li>\n<li><b>微信</b><br>zhengxiexie</li>\n<li><b>QQ</b><br>373618217</li>\n<li><b>个人博客</b><br><a href=\"https://zhengxiexie.github.io/\">https://zhengxiexie.github.io/</a></li>\n</ul>\n"},{"title":"categories","date":"2019-07-19T08:39:20.000Z","type":"categories","layout":"categories","_content":"","source":"categories/index.md","raw":"---\ntitle: categories\ndate: 2019-07-19 16:39:20\ntype: \"categories\"\nlayout: \"categories\"\n---","updated":"2022-11-18T07:58:21.559Z","path":"categories/index.html","comments":1,"_id":"clcvfoh3p000t50pq9txiha5b","content":"","site":{"data":{}},"excerpt":"","more":""},{"title":"contact","date":"2019-07-26T09:17:02.000Z","type":"contact","layout":"contact","_content":"\n# 欢迎留言\n大家有任何问题,都可以在评论区给我留言,或者加我联系方式:\n* QQ:**373618217**\n* 微信:**zhengxiexie**\n\n我很忙啦,如果不是很麻烦的问题就直接在评论区留言啦。\n**当然不介意小改改加我哦~~**\n\n# 友链交换\n想要交换友链的小伙伴,欢迎在评论区留言,留言格式:\n* **名称:**你的博客名称\n* **地址:**你的博客地址\n* **简介:**一句话简介\n* **头像:**你的头像地址\n\n例如我的博客友链,大家可以加到自己博客里哦:\n* **名称:**zhengxiexie\n* **地址:**https://zhengxiexie.github.io\n* **简介:**Linux Python\n* **头像:**https://zhengxiexie.github.io/medias/avatars/avatar.jpg","source":"contact/index.md","raw":"---\ntitle: contact\ndate: 2019-07-26 17:17:02\ntype: \"contact\"\nlayout: \"contact\"\n---\n\n# 欢迎留言\n大家有任何问题,都可以在评论区给我留言,或者加我联系方式:\n* QQ:**373618217**\n* 微信:**zhengxiexie**\n\n我很忙啦,如果不是很麻烦的问题就直接在评论区留言啦。\n**当然不介意小改改加我哦~~**\n\n# 友链交换\n想要交换友链的小伙伴,欢迎在评论区留言,留言格式:\n* **名称:**你的博客名称\n* **地址:**你的博客地址\n* **简介:**一句话简介\n* **头像:**你的头像地址\n\n例如我的博客友链,大家可以加到自己博客里哦:\n* **名称:**zhengxiexie\n* **地址:**https://zhengxiexie.github.io\n* **简介:**Linux Python\n* **头像:**https://zhengxiexie.github.io/medias/avatars/avatar.jpg","updated":"2023-01-06T05:43:30.699Z","path":"contact/index.html","comments":1,"_id":"clcvfoh3q000u50pq9etsq47t","content":"<h1 id=\"欢迎留言\"><a href=\"#欢迎留言\" class=\"headerlink\" title=\"欢迎留言\"></a>欢迎留言</h1><p>大家有任何问题,都可以在评论区给我留言,或者加我联系方式:</p>\n<ul>\n<li>QQ:<strong>373618217</strong></li>\n<li>微信:<strong>zhengxiexie</strong></li>\n</ul>\n<p>我很忙啦,如果不是很麻烦的问题就直接在评论区留言啦。<br><strong>当然不介意小改改加我哦~~</strong></p>\n<h1 id=\"友链交换\"><a href=\"#友链交换\" class=\"headerlink\" title=\"友链交换\"></a>友链交换</h1><p>想要交换友链的小伙伴,欢迎在评论区留言,留言格式:</p>\n<ul>\n<li><strong>名称:</strong>你的博客名称</li>\n<li><strong>地址:</strong>你的博客地址</li>\n<li><strong>简介:</strong>一句话简介</li>\n<li><strong>头像:</strong>你的头像地址</li>\n</ul>\n<p>例如我的博客友链,大家可以加到自己博客里哦:</p>\n<ul>\n<li><strong>名称:</strong>zhengxiexie</li>\n<li><strong>地址:</strong><a href=\"https://zhengxiexie.github.io\">https://zhengxiexie.github.io</a></li>\n<li><strong>简介:</strong>Linux Python</li>\n<li><strong>头像:</strong><a href=\"https://zhengxiexie.github.io/medias/avatars/avatar.jpg\">https://zhengxiexie.github.io/medias/avatars/avatar.jpg</a></li>\n</ul>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"欢迎留言\"><a href=\"#欢迎留言\" class=\"headerlink\" title=\"欢迎留言\"></a>欢迎留言</h1><p>大家有任何问题,都可以在评论区给我留言,或者加我联系方式:</p>\n<ul>\n<li>QQ:<strong>373618217</strong></li>\n<li>微信:<strong>zhengxiexie</strong></li>\n</ul>\n<p>我很忙啦,如果不是很麻烦的问题就直接在评论区留言啦。<br><strong>当然不介意小改改加我哦~~</strong></p>\n<h1 id=\"友链交换\"><a href=\"#友链交换\" class=\"headerlink\" title=\"友链交换\"></a>友链交换</h1><p>想要交换友链的小伙伴,欢迎在评论区留言,留言格式:</p>\n<ul>\n<li><strong>名称:</strong>你的博客名称</li>\n<li><strong>地址:</strong>你的博客地址</li>\n<li><strong>简介:</strong>一句话简介</li>\n<li><strong>头像:</strong>你的头像地址</li>\n</ul>\n<p>例如我的博客友链,大家可以加到自己博客里哦:</p>\n<ul>\n<li><strong>名称:</strong>zhengxiexie</li>\n<li><strong>地址:</strong><a href=\"https://zhengxiexie.github.io\">https://zhengxiexie.github.io</a></li>\n<li><strong>简介:</strong>Linux Python</li>\n<li><strong>头像:</strong><a href=\"https://zhengxiexie.github.io/medias/avatars/avatar.jpg\">https://zhengxiexie.github.io/medias/avatars/avatar.jpg</a></li>\n</ul>\n"},{"title":"friends","date":"2019-07-19T08:42:10.000Z","type":"friends","layout":"friends","_content":"\n# 赞赏名单\n感谢所有赞赏过我的小伙伴啦,你们的支持是我最大的动力!\n\n# 友链交换\n想要交换友链的小伙伴,欢迎在留言板留言,留言格式:\n* **名称:**你的博客名称\n* **地址:**你的博客地址\n* **简介:**一句话简介\n* **头像:**你的头像地址\n\n例如我的博客友链,大家可以加到自己博客里哦:\n* **名称:**zhengxiexie\n* **地址:**https://zhengxiexie.github.io\n* **简介:**Linux Python\n* **头像:**https://zhengxiexie.github.io/medias/avatars/avatar.jpg","source":"friends/index.md","raw":"---\ntitle: friends\ndate: 2019-07-19 16:42:10\ntype: \"friends\"\nlayout: \"friends\"\n---\n\n# 赞赏名单\n感谢所有赞赏过我的小伙伴啦,你们的支持是我最大的动力!\n\n# 友链交换\n想要交换友链的小伙伴,欢迎在留言板留言,留言格式:\n* **名称:**你的博客名称\n* **地址:**你的博客地址\n* **简介:**一句话简介\n* **头像:**你的头像地址\n\n例如我的博客友链,大家可以加到自己博客里哦:\n* **名称:**zhengxiexie\n* **地址:**https://zhengxiexie.github.io\n* **简介:**Linux Python\n* **头像:**https://zhengxiexie.github.io/medias/avatars/avatar.jpg","updated":"2023-01-06T05:43:30.700Z","path":"friends/index.html","comments":1,"_id":"clcvfoh3r000v50pqa5kbn6n6","content":"<h1 id=\"赞赏名单\"><a href=\"#赞赏名单\" class=\"headerlink\" title=\"赞赏名单\"></a>赞赏名单</h1><p>感谢所有赞赏过我的小伙伴啦,你们的支持是我最大的动力!</p>\n<h1 id=\"友链交换\"><a href=\"#友链交换\" class=\"headerlink\" title=\"友链交换\"></a>友链交换</h1><p>想要交换友链的小伙伴,欢迎在留言板留言,留言格式:</p>\n<ul>\n<li><strong>名称:</strong>你的博客名称</li>\n<li><strong>地址:</strong>你的博客地址</li>\n<li><strong>简介:</strong>一句话简介</li>\n<li><strong>头像:</strong>你的头像地址</li>\n</ul>\n<p>例如我的博客友链,大家可以加到自己博客里哦:</p>\n<ul>\n<li><strong>名称:</strong>zhengxiexie</li>\n<li><strong>地址:</strong><a href=\"https://zhengxiexie.github.io\">https://zhengxiexie.github.io</a></li>\n<li><strong>简介:</strong>Linux Python</li>\n<li><strong>头像:</strong><a href=\"https://zhengxiexie.github.io/medias/avatars/avatar.jpg\">https://zhengxiexie.github.io/medias/avatars/avatar.jpg</a></li>\n</ul>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"赞赏名单\"><a href=\"#赞赏名单\" class=\"headerlink\" title=\"赞赏名单\"></a>赞赏名单</h1><p>感谢所有赞赏过我的小伙伴啦,你们的支持是我最大的动力!</p>\n<h1 id=\"友链交换\"><a href=\"#友链交换\" class=\"headerlink\" title=\"友链交换\"></a>友链交换</h1><p>想要交换友链的小伙伴,欢迎在留言板留言,留言格式:</p>\n<ul>\n<li><strong>名称:</strong>你的博客名称</li>\n<li><strong>地址:</strong>你的博客地址</li>\n<li><strong>简介:</strong>一句话简介</li>\n<li><strong>头像:</strong>你的头像地址</li>\n</ul>\n<p>例如我的博客友链,大家可以加到自己博客里哦:</p>\n<ul>\n<li><strong>名称:</strong>zhengxiexie</li>\n<li><strong>地址:</strong><a href=\"https://zhengxiexie.github.io\">https://zhengxiexie.github.io</a></li>\n<li><strong>简介:</strong>Linux Python</li>\n<li><strong>头像:</strong><a href=\"https://zhengxiexie.github.io/medias/avatars/avatar.jpg\">https://zhengxiexie.github.io/medias/avatars/avatar.jpg</a></li>\n</ul>\n"},{"title":"tags","date":"2019-07-19T08:40:27.000Z","type":"tags","layout":"tags","_content":"","source":"tags/index.md","raw":"---\ntitle: tags\ndate: 2019-07-19 16:40:27\ntype: \"tags\"\nlayout: \"tags\"\n---","updated":"2022-11-18T07:58:21.561Z","path":"tags/index.html","comments":1,"_id":"clcvfoh3s000w50pq9lhh3m46","content":"","site":{"data":{}},"excerpt":"","more":""},{"title":"简历","type":"简历","layout":"简历","date":"2023-01-07T13:50:07.000Z","_content":"<img style=\"position:relative;right:100px;float:right\" src=\"/medias/pic/2.jpg\" width=\"15%\" height=\"48%\">\n\n# 个人简介\n中文名:郑勰(xié)\n英文名:Ben\n生日:1989.5.12\n中英文听说读写良好[试听](https://music.163.com/dj?id=2059907935&userid=52336738)。\n先后在百度、小米、腾讯、VMware等一线互联网公司工作,熟系互联网主流技术,行业经验 10 年。\n喜欢分布式技术,撰写的文章《浅谈 CAP 和 Paxos 共识算法》曾入选腾讯对外技术工程文集[链接](https://mp.weixin.qq.com/s/Fj4zERz9PEuNumd_SI0bEA)。\n热爱创新,在VMware发布专利《VMWI609.WO-NAMED PORT SECURITY POLICY--A MORE FLEXIBLE TRAFFIC ISOLATION SOLUTION》。\n\n# 教育经历\n* <b>本科 计算机科学与技术</b>\n 浙江工业大学\n 2008/09 - 2012/06\n\n# 公司经历\n### 2021.4 - 至今\n* <b>VMware JIL in vSphere k8s drivers Member of Technical Staff</b>\n1. 负责公司核心产品 vSphere、NSX-T网络组件的开发,尤其是K8S和NSX-T互通组件CNI [nsx-operator](https://github.com/vmware-tanzu/nsx-operator.git)的架构设计。\n\n### 2019.4 - 2021.4\n* <b>腾讯 腾讯云网络产品组 高级开发工程师</b>\n1. 负责腾讯云私有云网络控制器层面的后台开发。私有网络(Virtual Private Cloud,VPC)是基于腾讯云构建的专属云上网络空间,为腾讯云上的资源提供网络服务,不同私有网络间完全逻辑隔离。可以自定义网络环境、路由表、安全策略等;同时,私有网络支持多种方式连接 Internet、连接其他 VPC、连接本地数据中心,助力轻松部署云上网络。私有云网络是整个腾讯云网络的核心,控制器负责下发数十万台物理机和网关流表。目前腾讯云在全球 25 个地理区域内运营着 53 个可用区,且在计算和网络领域已经迈入“双百时代”(全网服务器总数量突破100万台,带宽峰值突破100T),如何高效、弹性、成本低地实现网络资源的互联互通,是一个充满挑战的课题。控制器层面采用 Mysql 存储流表,zookeeper 作为中间件主动通知物理机和网关收发数据,采用自定义协议或者 protobuf 协议和 dpdk 或者 kernel 数据面做数据互通。\n2. 负责基础网络安全组控制层面的后台开发。安全组即虚拟防火墙,具备有状态的数据包过滤功能,用于设置云服务器、负载均衡、云数据库等实例的网络访问控制,控制实例级别的出入流量,是重要的网络安全隔离手段。同私有云网络控制器一样,也是采用 zookeeper 作为中间件通知安全策略,物理机用内核 netfilter framework封包过滤。\n\n### 2018.8 - 2019.4\n* <b>SHAREit 研发部 后端高级开发工程师</b>\n1. 负责Youtube视频大规模爬取,由原来的单机模式改为分布式爬取。利用 AWS EC2 AutoScaling 集群实现消费者竞争爬取数据和解析, 利用 Mysql 储存关键词爬取进度及数目,利用 Redis 位图实现布隆过滤器进行排重,利用 AWS SQS 实现消息队列缓冲,利用 Dynamodb 实现底层存储,利用 AWS Lambda 实现和ElasticSearch索引同步并提供给服务端查询。由最初的每天不到一万的数据量提升至每天二十万,数据总量达到三千万。DAU日活印度地区两千万,非印地区一千万。\n2. 负责Youtube服务端视频源CDN地址解析和客户端众包解析入库,每秒从客户端接收数据量达到2万。利用AWS Aurora数据库存储由服务端解析的链接和客户端上传的链接。支持按国家及城市维度存储。 利用 Redis 分布式锁协调消费者竞争资源,防止重复解析。及时清除过期链接,及时检测302跳转链接和合法性,将链接下发的比率由原来的不到30%提高到四个九,将链接播放秒半成功率提高到80%。后续继续优化方案,将实例数目由原来的100台减少至一半。此项目被公司评为年度优秀项目。\n\n### 2015.10 - 2018.8\n* <b>小米 小米电视 服务端高级开发工程师</b>\n1. 手机画报是小米手机内置应用,有入口让用户可以选择打开或者关闭。参与设计了后台架构和运营平台,对接了小米推荐系统和数据工厂。主备MySQL作为底层数据库供Django运营平台使用,运营发布数据至Redis,Nginx做负载均衡和反响代理,将请求分发后台Tornado进程,Tornado负责将Redis数据响应给客户端,QPS达到5k。\n2. 手机视频实现追剧功能。一旦用户订阅的电视剧有更新,自动对接小米推送系统通知用户。客户端在推送系统上以剧集id注册Topic,服务端定时检测是否有新剧集,有则POST请求推送系统,发PUSH到客户端通知。\n3. 小米电视目前在国内销售1000万台,QPS达到两万,但是因为是聚合各方CP资源,在播放视频和浏览数据的时候,经常发生崩溃情况。为了及时了解并记录客户端错误日志,独立设计了报障平台。采用多生产者,多消费者模型开发,并引入Twitter的Kestrel消息队列,接入小米融合云FDS,并加入了OpenFalcon运维监控,实时监控队列情况和请求状况。多个Tornado进程异步接受客户端传来的压缩后的log数据,并及时返回客户端报障ID,log数据最大100k,被发送到Kestrel消息队列后,多个消费者进程从队列读取数据,写入FDS,并将FDS返回后的日志下载链接连同一条报障日志的其他元数据,一起写入运营系统,供客服和开发排查问题,提高播放资源的稳定性。由于Kestrel Python客户端在取数据的时候,并发量高时,容易发生取到同样数据的情况,所以引入分布式锁,解决这类问题。\n4. PatchWall是小米电视核心业务,是用户感受最多的地方,也是主营业务。为了拓展国际化业务,小米电视和Google合作开发ATV(Android TV),开拓进印度、印尼、俄罗斯市场,接入了当地十多家CP。参考国内小米电视后台架构,开发并部署了国际化业务。Service API 利用Python Tornado框架, 搜索引擎采用Solr,缓存层利用Redis 一致性Hash,持久层用到主备模型Mysql和Redis。运营系统基于Django Admin,支持多国语言。结合当地法律等特殊情况,开启多进程,针对所有海报处理成统一格式,加上蒙层和边缘模糊效果。国际版代码称为i18n_cms,i18n_service。针对于不同国家,因为我们是做平台,我拟定方案,代码用一套,代码中的配置信息根据不同国家采用不同配置,数据用多套,即每个国家使用各自独立的数据,每个国家部署独立的机房,这样,对于开发,只需要改一次代码即可。数据标准化,也节省对接成本。\n5. 独立开发电视后台APK的触发升级和灰度升级功能,针对电视型号、用户级别、电视系统采用不同的升级策略。为了节省带宽成本,采用灰度升级,灰度升级原理,设置灰度时间范围,按照当前时间的百分比,算出时间窗,根据电视的deviceid的hash值算出是否落入时间窗范围内。\n\n### 2014.8 - 2015.10\n* <b>知道创宇 研发部 开发工程师</b>\n1. 通过爬虫监控黑客攻击中国政府网站信息,及时给公安部门提供报警信息。\n2. 负责星图项目后端系统,后端存储网站漏洞信息,因为没有自建CDN,所以采用GridFS存储图片等静态数据。\n\n\n### 2013.2 - 2014.8\n* <b>百度 移动游戏 RD</b>\n1. 主营业务是移动游戏和应用分发,后台主要用C++语言,利用百度自主研发的UB框架,给客户端和中间层提供接口,支持各种业务。QPS达到3k。\n2. 独立开发棋牌大厅项目,设计用户抢对奖券活动。后台Nginx+Openresty过滤请求流,多台应用server实现应用逻辑,对奖券存储在Redis,利用Redis的事务功能和原子操作实现库存加减。\n3. MySQL存储资源数据,MongoDB负责接口数据。\n\n\n### 2012.10 - 2013.2\n* <b>恒生电子 银行事业部 C后端开发工程师</b>\n 负责银行理财销售系统低柜开发。\n\n\n# 联系方式\n* <b>电子邮箱</b>\n [email protected]\n* <b>微信</b>\n zhengxiexie\n* <b>QQ</b>\n 373618217\n* <b>个人博客</b>\n https://zhengxiexie.github.io/\n","source":"简历/index.md","raw":"---\ntitle: 简历\ntype: 简历\nlayout: 简历\ndate: 2023-01-07 21:50:07\n---\n<img style=\"position:relative;right:100px;float:right\" src=\"/medias/pic/2.jpg\" width=\"15%\" height=\"48%\">\n\n# 个人简介\n中文名:郑勰(xié)\n英文名:Ben\n生日:1989.5.12\n中英文听说读写良好[试听](https://music.163.com/dj?id=2059907935&userid=52336738)。\n先后在百度、小米、腾讯、VMware等一线互联网公司工作,熟系互联网主流技术,行业经验 10 年。\n喜欢分布式技术,撰写的文章《浅谈 CAP 和 Paxos 共识算法》曾入选腾讯对外技术工程文集[链接](https://mp.weixin.qq.com/s/Fj4zERz9PEuNumd_SI0bEA)。\n热爱创新,在VMware发布专利《VMWI609.WO-NAMED PORT SECURITY POLICY--A MORE FLEXIBLE TRAFFIC ISOLATION SOLUTION》。\n\n# 教育经历\n* <b>本科 计算机科学与技术</b>\n 浙江工业大学\n 2008/09 - 2012/06\n\n# 公司经历\n### 2021.4 - 至今\n* <b>VMware JIL in vSphere k8s drivers Member of Technical Staff</b>\n1. 负责公司核心产品 vSphere、NSX-T网络组件的开发,尤其是K8S和NSX-T互通组件CNI [nsx-operator](https://github.com/vmware-tanzu/nsx-operator.git)的架构设计。\n\n### 2019.4 - 2021.4\n* <b>腾讯 腾讯云网络产品组 高级开发工程师</b>\n1. 负责腾讯云私有云网络控制器层面的后台开发。私有网络(Virtual Private Cloud,VPC)是基于腾讯云构建的专属云上网络空间,为腾讯云上的资源提供网络服务,不同私有网络间完全逻辑隔离。可以自定义网络环境、路由表、安全策略等;同时,私有网络支持多种方式连接 Internet、连接其他 VPC、连接本地数据中心,助力轻松部署云上网络。私有云网络是整个腾讯云网络的核心,控制器负责下发数十万台物理机和网关流表。目前腾讯云在全球 25 个地理区域内运营着 53 个可用区,且在计算和网络领域已经迈入“双百时代”(全网服务器总数量突破100万台,带宽峰值突破100T),如何高效、弹性、成本低地实现网络资源的互联互通,是一个充满挑战的课题。控制器层面采用 Mysql 存储流表,zookeeper 作为中间件主动通知物理机和网关收发数据,采用自定义协议或者 protobuf 协议和 dpdk 或者 kernel 数据面做数据互通。\n2. 负责基础网络安全组控制层面的后台开发。安全组即虚拟防火墙,具备有状态的数据包过滤功能,用于设置云服务器、负载均衡、云数据库等实例的网络访问控制,控制实例级别的出入流量,是重要的网络安全隔离手段。同私有云网络控制器一样,也是采用 zookeeper 作为中间件通知安全策略,物理机用内核 netfilter framework封包过滤。\n\n### 2018.8 - 2019.4\n* <b>SHAREit 研发部 后端高级开发工程师</b>\n1. 负责Youtube视频大规模爬取,由原来的单机模式改为分布式爬取。利用 AWS EC2 AutoScaling 集群实现消费者竞争爬取数据和解析, 利用 Mysql 储存关键词爬取进度及数目,利用 Redis 位图实现布隆过滤器进行排重,利用 AWS SQS 实现消息队列缓冲,利用 Dynamodb 实现底层存储,利用 AWS Lambda 实现和ElasticSearch索引同步并提供给服务端查询。由最初的每天不到一万的数据量提升至每天二十万,数据总量达到三千万。DAU日活印度地区两千万,非印地区一千万。\n2. 负责Youtube服务端视频源CDN地址解析和客户端众包解析入库,每秒从客户端接收数据量达到2万。利用AWS Aurora数据库存储由服务端解析的链接和客户端上传的链接。支持按国家及城市维度存储。 利用 Redis 分布式锁协调消费者竞争资源,防止重复解析。及时清除过期链接,及时检测302跳转链接和合法性,将链接下发的比率由原来的不到30%提高到四个九,将链接播放秒半成功率提高到80%。后续继续优化方案,将实例数目由原来的100台减少至一半。此项目被公司评为年度优秀项目。\n\n### 2015.10 - 2018.8\n* <b>小米 小米电视 服务端高级开发工程师</b>\n1. 手机画报是小米手机内置应用,有入口让用户可以选择打开或者关闭。参与设计了后台架构和运营平台,对接了小米推荐系统和数据工厂。主备MySQL作为底层数据库供Django运营平台使用,运营发布数据至Redis,Nginx做负载均衡和反响代理,将请求分发后台Tornado进程,Tornado负责将Redis数据响应给客户端,QPS达到5k。\n2. 手机视频实现追剧功能。一旦用户订阅的电视剧有更新,自动对接小米推送系统通知用户。客户端在推送系统上以剧集id注册Topic,服务端定时检测是否有新剧集,有则POST请求推送系统,发PUSH到客户端通知。\n3. 小米电视目前在国内销售1000万台,QPS达到两万,但是因为是聚合各方CP资源,在播放视频和浏览数据的时候,经常发生崩溃情况。为了及时了解并记录客户端错误日志,独立设计了报障平台。采用多生产者,多消费者模型开发,并引入Twitter的Kestrel消息队列,接入小米融合云FDS,并加入了OpenFalcon运维监控,实时监控队列情况和请求状况。多个Tornado进程异步接受客户端传来的压缩后的log数据,并及时返回客户端报障ID,log数据最大100k,被发送到Kestrel消息队列后,多个消费者进程从队列读取数据,写入FDS,并将FDS返回后的日志下载链接连同一条报障日志的其他元数据,一起写入运营系统,供客服和开发排查问题,提高播放资源的稳定性。由于Kestrel Python客户端在取数据的时候,并发量高时,容易发生取到同样数据的情况,所以引入分布式锁,解决这类问题。\n4. PatchWall是小米电视核心业务,是用户感受最多的地方,也是主营业务。为了拓展国际化业务,小米电视和Google合作开发ATV(Android TV),开拓进印度、印尼、俄罗斯市场,接入了当地十多家CP。参考国内小米电视后台架构,开发并部署了国际化业务。Service API 利用Python Tornado框架, 搜索引擎采用Solr,缓存层利用Redis 一致性Hash,持久层用到主备模型Mysql和Redis。运营系统基于Django Admin,支持多国语言。结合当地法律等特殊情况,开启多进程,针对所有海报处理成统一格式,加上蒙层和边缘模糊效果。国际版代码称为i18n_cms,i18n_service。针对于不同国家,因为我们是做平台,我拟定方案,代码用一套,代码中的配置信息根据不同国家采用不同配置,数据用多套,即每个国家使用各自独立的数据,每个国家部署独立的机房,这样,对于开发,只需要改一次代码即可。数据标准化,也节省对接成本。\n5. 独立开发电视后台APK的触发升级和灰度升级功能,针对电视型号、用户级别、电视系统采用不同的升级策略。为了节省带宽成本,采用灰度升级,灰度升级原理,设置灰度时间范围,按照当前时间的百分比,算出时间窗,根据电视的deviceid的hash值算出是否落入时间窗范围内。\n\n### 2014.8 - 2015.10\n* <b>知道创宇 研发部 开发工程师</b>\n1. 通过爬虫监控黑客攻击中国政府网站信息,及时给公安部门提供报警信息。\n2. 负责星图项目后端系统,后端存储网站漏洞信息,因为没有自建CDN,所以采用GridFS存储图片等静态数据。\n\n\n### 2013.2 - 2014.8\n* <b>百度 移动游戏 RD</b>\n1. 主营业务是移动游戏和应用分发,后台主要用C++语言,利用百度自主研发的UB框架,给客户端和中间层提供接口,支持各种业务。QPS达到3k。\n2. 独立开发棋牌大厅项目,设计用户抢对奖券活动。后台Nginx+Openresty过滤请求流,多台应用server实现应用逻辑,对奖券存储在Redis,利用Redis的事务功能和原子操作实现库存加减。\n3. MySQL存储资源数据,MongoDB负责接口数据。\n\n\n### 2012.10 - 2013.2\n* <b>恒生电子 银行事业部 C后端开发工程师</b>\n 负责银行理财销售系统低柜开发。\n\n\n# 联系方式\n* <b>电子邮箱</b>\n [email protected]\n* <b>微信</b>\n zhengxiexie\n* <b>QQ</b>\n 373618217\n* <b>个人博客</b>\n https://zhengxiexie.github.io/\n","updated":"2023-01-07T16:52:35.143Z","path":"简历/index.html","comments":1,"_id":"clcvfoh3s000x50pq86fdxfdh","content":"<img style=\"position:relative;right:100px;float:right\" src=\"/medias/pic/2.jpg\" width=\"15%\" height=\"48%\">\n\n<h1 id=\"个人简介\"><a href=\"#个人简介\" class=\"headerlink\" title=\"个人简介\"></a>个人简介</h1><p>中文名:郑勰(xié)<br>英文名:Ben<br>生日:1989.5.12<br>中英文听说读写良好<a href=\"https://music.163.com/dj?id=2059907935&userid=52336738\" target=\"_blank\" rel=\"noopener\">试听</a>。<br>先后在百度、小米、腾讯、VMware等一线互联网公司工作,熟系互联网主流技术,行业经验 10 年。<br>喜欢分布式技术,撰写的文章《浅谈 CAP 和 Paxos 共识算法》曾入选腾讯对外技术工程文集<a href=\"https://mp.weixin.qq.com/s/Fj4zERz9PEuNumd_SI0bEA\" target=\"_blank\" rel=\"noopener\">链接</a>。<br>热爱创新,在VMware发布专利《VMWI609.WO-NAMED PORT SECURITY POLICY–A MORE FLEXIBLE TRAFFIC ISOLATION SOLUTION》。</p>\n<h1 id=\"教育经历\"><a href=\"#教育经历\" class=\"headerlink\" title=\"教育经历\"></a>教育经历</h1><ul>\n<li><b>本科 计算机科学与技术</b><br>浙江工业大学<br>2008/09 - 2012/06</li>\n</ul>\n<h1 id=\"公司经历\"><a href=\"#公司经历\" class=\"headerlink\" title=\"公司经历\"></a>公司经历</h1><h3 id=\"2021-4-至今\"><a href=\"#2021-4-至今\" class=\"headerlink\" title=\"2021.4 - 至今\"></a>2021.4 - 至今</h3><ul>\n<li><b>VMware JIL in vSphere k8s drivers Member of Technical Staff</b></li>\n</ul>\n<ol>\n<li>负责公司核心产品 vSphere、NSX-T网络组件的开发,尤其是K8S和NSX-T互通组件CNI <a href=\"https://github.com/vmware-tanzu/nsx-operator.git\" target=\"_blank\" rel=\"noopener\">nsx-operator</a>的架构设计。</li>\n</ol>\n<h3 id=\"2019-4-2021-4\"><a href=\"#2019-4-2021-4\" class=\"headerlink\" title=\"2019.4 - 2021.4\"></a>2019.4 - 2021.4</h3><ul>\n<li><b>腾讯 腾讯云网络产品组 高级开发工程师</b></li>\n</ul>\n<ol>\n<li>负责腾讯云私有云网络控制器层面的后台开发。私有网络(Virtual Private Cloud,VPC)是基于腾讯云构建的专属云上网络空间,为腾讯云上的资源提供网络服务,不同私有网络间完全逻辑隔离。可以自定义网络环境、路由表、安全策略等;同时,私有网络支持多种方式连接 Internet、连接其他 VPC、连接本地数据中心,助力轻松部署云上网络。私有云网络是整个腾讯云网络的核心,控制器负责下发数十万台物理机和网关流表。目前腾讯云在全球 25 个地理区域内运营着 53 个可用区,且在计算和网络领域已经迈入“双百时代”(全网服务器总数量突破100万台,带宽峰值突破100T),如何高效、弹性、成本低地实现网络资源的互联互通,是一个充满挑战的课题。控制器层面采用 Mysql 存储流表,zookeeper 作为中间件主动通知物理机和网关收发数据,采用自定义协议或者 protobuf 协议和 dpdk 或者 kernel 数据面做数据互通。</li>\n<li>负责基础网络安全组控制层面的后台开发。安全组即虚拟防火墙,具备有状态的数据包过滤功能,用于设置云服务器、负载均衡、云数据库等实例的网络访问控制,控制实例级别的出入流量,是重要的网络安全隔离手段。同私有云网络控制器一样,也是采用 zookeeper 作为中间件通知安全策略,物理机用内核 netfilter framework封包过滤。</li>\n</ol>\n<h3 id=\"2018-8-2019-4\"><a href=\"#2018-8-2019-4\" class=\"headerlink\" title=\"2018.8 - 2019.4\"></a>2018.8 - 2019.4</h3><ul>\n<li><b>SHAREit 研发部 后端高级开发工程师</b></li>\n</ul>\n<ol>\n<li>负责Youtube视频大规模爬取,由原来的单机模式改为分布式爬取。利用 AWS EC2 AutoScaling 集群实现消费者竞争爬取数据和解析, 利用 Mysql 储存关键词爬取进度及数目,利用 Redis 位图实现布隆过滤器进行排重,利用 AWS SQS 实现消息队列缓冲,利用 Dynamodb 实现底层存储,利用 AWS Lambda 实现和ElasticSearch索引同步并提供给服务端查询。由最初的每天不到一万的数据量提升至每天二十万,数据总量达到三千万。DAU日活印度地区两千万,非印地区一千万。</li>\n<li>负责Youtube服务端视频源CDN地址解析和客户端众包解析入库,每秒从客户端接收数据量达到2万。利用AWS Aurora数据库存储由服务端解析的链接和客户端上传的链接。支持按国家及城市维度存储。 利用 Redis 分布式锁协调消费者竞争资源,防止重复解析。及时清除过期链接,及时检测302跳转链接和合法性,将链接下发的比率由原来的不到30%提高到四个九,将链接播放秒半成功率提高到80%。后续继续优化方案,将实例数目由原来的100台减少至一半。此项目被公司评为年度优秀项目。</li>\n</ol>\n<h3 id=\"2015-10-2018-8\"><a href=\"#2015-10-2018-8\" class=\"headerlink\" title=\"2015.10 - 2018.8\"></a>2015.10 - 2018.8</h3><ul>\n<li><b>小米 小米电视 服务端高级开发工程师</b></li>\n</ul>\n<ol>\n<li>手机画报是小米手机内置应用,有入口让用户可以选择打开或者关闭。参与设计了后台架构和运营平台,对接了小米推荐系统和数据工厂。主备MySQL作为底层数据库供Django运营平台使用,运营发布数据至Redis,Nginx做负载均衡和反响代理,将请求分发后台Tornado进程,Tornado负责将Redis数据响应给客户端,QPS达到5k。</li>\n<li>手机视频实现追剧功能。一旦用户订阅的电视剧有更新,自动对接小米推送系统通知用户。客户端在推送系统上以剧集id注册Topic,服务端定时检测是否有新剧集,有则POST请求推送系统,发PUSH到客户端通知。</li>\n<li>小米电视目前在国内销售1000万台,QPS达到两万,但是因为是聚合各方CP资源,在播放视频和浏览数据的时候,经常发生崩溃情况。为了及时了解并记录客户端错误日志,独立设计了报障平台。采用多生产者,多消费者模型开发,并引入Twitter的Kestrel消息队列,接入小米融合云FDS,并加入了OpenFalcon运维监控,实时监控队列情况和请求状况。多个Tornado进程异步接受客户端传来的压缩后的log数据,并及时返回客户端报障ID,log数据最大100k,被发送到Kestrel消息队列后,多个消费者进程从队列读取数据,写入FDS,并将FDS返回后的日志下载链接连同一条报障日志的其他元数据,一起写入运营系统,供客服和开发排查问题,提高播放资源的稳定性。由于Kestrel Python客户端在取数据的时候,并发量高时,容易发生取到同样数据的情况,所以引入分布式锁,解决这类问题。</li>\n<li>PatchWall是小米电视核心业务,是用户感受最多的地方,也是主营业务。为了拓展国际化业务,小米电视和Google合作开发ATV(Android TV),开拓进印度、印尼、俄罗斯市场,接入了当地十多家CP。参考国内小米电视后台架构,开发并部署了国际化业务。Service API 利用Python Tornado框架, 搜索引擎采用Solr,缓存层利用Redis 一致性Hash,持久层用到主备模型Mysql和Redis。运营系统基于Django Admin,支持多国语言。结合当地法律等特殊情况,开启多进程,针对所有海报处理成统一格式,加上蒙层和边缘模糊效果。国际版代码称为i18n_cms,i18n_service。针对于不同国家,因为我们是做平台,我拟定方案,代码用一套,代码中的配置信息根据不同国家采用不同配置,数据用多套,即每个国家使用各自独立的数据,每个国家部署独立的机房,这样,对于开发,只需要改一次代码即可。数据标准化,也节省对接成本。</li>\n<li>独立开发电视后台APK的触发升级和灰度升级功能,针对电视型号、用户级别、电视系统采用不同的升级策略。为了节省带宽成本,采用灰度升级,灰度升级原理,设置灰度时间范围,按照当前时间的百分比,算出时间窗,根据电视的deviceid的hash值算出是否落入时间窗范围内。</li>\n</ol>\n<h3 id=\"2014-8-2015-10\"><a href=\"#2014-8-2015-10\" class=\"headerlink\" title=\"2014.8 - 2015.10\"></a>2014.8 - 2015.10</h3><ul>\n<li><b>知道创宇 研发部 开发工程师</b></li>\n</ul>\n<ol>\n<li>通过爬虫监控黑客攻击中国政府网站信息,及时给公安部门提供报警信息。</li>\n<li>负责星图项目后端系统,后端存储网站漏洞信息,因为没有自建CDN,所以采用GridFS存储图片等静态数据。</li>\n</ol>\n<h3 id=\"2013-2-2014-8\"><a href=\"#2013-2-2014-8\" class=\"headerlink\" title=\"2013.2 - 2014.8\"></a>2013.2 - 2014.8</h3><ul>\n<li><b>百度 移动游戏 RD</b></li>\n</ul>\n<ol>\n<li>主营业务是移动游戏和应用分发,后台主要用C++语言,利用百度自主研发的UB框架,给客户端和中间层提供接口,支持各种业务。QPS达到3k。</li>\n<li>独立开发棋牌大厅项目,设计用户抢对奖券活动。后台Nginx+Openresty过滤请求流,多台应用server实现应用逻辑,对奖券存储在Redis,利用Redis的事务功能和原子操作实现库存加减。</li>\n<li>MySQL存储资源数据,MongoDB负责接口数据。</li>\n</ol>\n<h3 id=\"2012-10-2013-2\"><a href=\"#2012-10-2013-2\" class=\"headerlink\" title=\"2012.10 - 2013.2\"></a>2012.10 - 2013.2</h3><ul>\n<li><b>恒生电子 银行事业部 C后端开发工程师</b><br>负责银行理财销售系统低柜开发。</li>\n</ul>\n<h1 id=\"联系方式\"><a href=\"#联系方式\" class=\"headerlink\" title=\"联系方式\"></a>联系方式</h1><ul>\n<li><b>电子邮箱</b><br><a href=\"mailto:[email protected]\" target=\"_blank\" rel=\"noopener\">[email protected]</a></li>\n<li><b>微信</b><br>zhengxiexie</li>\n<li><b>QQ</b><br>373618217</li>\n<li><b>个人博客</b><br><a href=\"https://zhengxiexie.github.io/\">https://zhengxiexie.github.io/</a></li>\n</ul>\n","site":{"data":{}},"excerpt":"","more":"<img style=\"position:relative;right:100px;float:right\" src=\"/medias/pic/2.jpg\" width=\"15%\" height=\"48%\">\n\n<h1 id=\"个人简介\"><a href=\"#个人简介\" class=\"headerlink\" title=\"个人简介\"></a>个人简介</h1><p>中文名:郑勰(xié)<br>英文名:Ben<br>生日:1989.5.12<br>中英文听说读写良好<a href=\"https://music.163.com/dj?id=2059907935&userid=52336738\" target=\"_blank\" rel=\"noopener\">试听</a>。<br>先后在百度、小米、腾讯、VMware等一线互联网公司工作,熟系互联网主流技术,行业经验 10 年。<br>喜欢分布式技术,撰写的文章《浅谈 CAP 和 Paxos 共识算法》曾入选腾讯对外技术工程文集<a href=\"https://mp.weixin.qq.com/s/Fj4zERz9PEuNumd_SI0bEA\" target=\"_blank\" rel=\"noopener\">链接</a>。<br>热爱创新,在VMware发布专利《VMWI609.WO-NAMED PORT SECURITY POLICY–A MORE FLEXIBLE TRAFFIC ISOLATION SOLUTION》。</p>\n<h1 id=\"教育经历\"><a href=\"#教育经历\" class=\"headerlink\" title=\"教育经历\"></a>教育经历</h1><ul>\n<li><b>本科 计算机科学与技术</b><br>浙江工业大学<br>2008/09 - 2012/06</li>\n</ul>\n<h1 id=\"公司经历\"><a href=\"#公司经历\" class=\"headerlink\" title=\"公司经历\"></a>公司经历</h1><h3 id=\"2021-4-至今\"><a href=\"#2021-4-至今\" class=\"headerlink\" title=\"2021.4 - 至今\"></a>2021.4 - 至今</h3><ul>\n<li><b>VMware JIL in vSphere k8s drivers Member of Technical Staff</b></li>\n</ul>\n<ol>\n<li>负责公司核心产品 vSphere、NSX-T网络组件的开发,尤其是K8S和NSX-T互通组件CNI <a href=\"https://github.com/vmware-tanzu/nsx-operator.git\" target=\"_blank\" rel=\"noopener\">nsx-operator</a>的架构设计。</li>\n</ol>\n<h3 id=\"2019-4-2021-4\"><a href=\"#2019-4-2021-4\" class=\"headerlink\" title=\"2019.4 - 2021.4\"></a>2019.4 - 2021.4</h3><ul>\n<li><b>腾讯 腾讯云网络产品组 高级开发工程师</b></li>\n</ul>\n<ol>\n<li>负责腾讯云私有云网络控制器层面的后台开发。私有网络(Virtual Private Cloud,VPC)是基于腾讯云构建的专属云上网络空间,为腾讯云上的资源提供网络服务,不同私有网络间完全逻辑隔离。可以自定义网络环境、路由表、安全策略等;同时,私有网络支持多种方式连接 Internet、连接其他 VPC、连接本地数据中心,助力轻松部署云上网络。私有云网络是整个腾讯云网络的核心,控制器负责下发数十万台物理机和网关流表。目前腾讯云在全球 25 个地理区域内运营着 53 个可用区,且在计算和网络领域已经迈入“双百时代”(全网服务器总数量突破100万台,带宽峰值突破100T),如何高效、弹性、成本低地实现网络资源的互联互通,是一个充满挑战的课题。控制器层面采用 Mysql 存储流表,zookeeper 作为中间件主动通知物理机和网关收发数据,采用自定义协议或者 protobuf 协议和 dpdk 或者 kernel 数据面做数据互通。</li>\n<li>负责基础网络安全组控制层面的后台开发。安全组即虚拟防火墙,具备有状态的数据包过滤功能,用于设置云服务器、负载均衡、云数据库等实例的网络访问控制,控制实例级别的出入流量,是重要的网络安全隔离手段。同私有云网络控制器一样,也是采用 zookeeper 作为中间件通知安全策略,物理机用内核 netfilter framework封包过滤。</li>\n</ol>\n<h3 id=\"2018-8-2019-4\"><a href=\"#2018-8-2019-4\" class=\"headerlink\" title=\"2018.8 - 2019.4\"></a>2018.8 - 2019.4</h3><ul>\n<li><b>SHAREit 研发部 后端高级开发工程师</b></li>\n</ul>\n<ol>\n<li>负责Youtube视频大规模爬取,由原来的单机模式改为分布式爬取。利用 AWS EC2 AutoScaling 集群实现消费者竞争爬取数据和解析, 利用 Mysql 储存关键词爬取进度及数目,利用 Redis 位图实现布隆过滤器进行排重,利用 AWS SQS 实现消息队列缓冲,利用 Dynamodb 实现底层存储,利用 AWS Lambda 实现和ElasticSearch索引同步并提供给服务端查询。由最初的每天不到一万的数据量提升至每天二十万,数据总量达到三千万。DAU日活印度地区两千万,非印地区一千万。</li>\n<li>负责Youtube服务端视频源CDN地址解析和客户端众包解析入库,每秒从客户端接收数据量达到2万。利用AWS Aurora数据库存储由服务端解析的链接和客户端上传的链接。支持按国家及城市维度存储。 利用 Redis 分布式锁协调消费者竞争资源,防止重复解析。及时清除过期链接,及时检测302跳转链接和合法性,将链接下发的比率由原来的不到30%提高到四个九,将链接播放秒半成功率提高到80%。后续继续优化方案,将实例数目由原来的100台减少至一半。此项目被公司评为年度优秀项目。</li>\n</ol>\n<h3 id=\"2015-10-2018-8\"><a href=\"#2015-10-2018-8\" class=\"headerlink\" title=\"2015.10 - 2018.8\"></a>2015.10 - 2018.8</h3><ul>\n<li><b>小米 小米电视 服务端高级开发工程师</b></li>\n</ul>\n<ol>\n<li>手机画报是小米手机内置应用,有入口让用户可以选择打开或者关闭。参与设计了后台架构和运营平台,对接了小米推荐系统和数据工厂。主备MySQL作为底层数据库供Django运营平台使用,运营发布数据至Redis,Nginx做负载均衡和反响代理,将请求分发后台Tornado进程,Tornado负责将Redis数据响应给客户端,QPS达到5k。</li>\n<li>手机视频实现追剧功能。一旦用户订阅的电视剧有更新,自动对接小米推送系统通知用户。客户端在推送系统上以剧集id注册Topic,服务端定时检测是否有新剧集,有则POST请求推送系统,发PUSH到客户端通知。</li>\n<li>小米电视目前在国内销售1000万台,QPS达到两万,但是因为是聚合各方CP资源,在播放视频和浏览数据的时候,经常发生崩溃情况。为了及时了解并记录客户端错误日志,独立设计了报障平台。采用多生产者,多消费者模型开发,并引入Twitter的Kestrel消息队列,接入小米融合云FDS,并加入了OpenFalcon运维监控,实时监控队列情况和请求状况。多个Tornado进程异步接受客户端传来的压缩后的log数据,并及时返回客户端报障ID,log数据最大100k,被发送到Kestrel消息队列后,多个消费者进程从队列读取数据,写入FDS,并将FDS返回后的日志下载链接连同一条报障日志的其他元数据,一起写入运营系统,供客服和开发排查问题,提高播放资源的稳定性。由于Kestrel Python客户端在取数据的时候,并发量高时,容易发生取到同样数据的情况,所以引入分布式锁,解决这类问题。</li>\n<li>PatchWall是小米电视核心业务,是用户感受最多的地方,也是主营业务。为了拓展国际化业务,小米电视和Google合作开发ATV(Android TV),开拓进印度、印尼、俄罗斯市场,接入了当地十多家CP。参考国内小米电视后台架构,开发并部署了国际化业务。Service API 利用Python Tornado框架, 搜索引擎采用Solr,缓存层利用Redis 一致性Hash,持久层用到主备模型Mysql和Redis。运营系统基于Django Admin,支持多国语言。结合当地法律等特殊情况,开启多进程,针对所有海报处理成统一格式,加上蒙层和边缘模糊效果。国际版代码称为i18n_cms,i18n_service。针对于不同国家,因为我们是做平台,我拟定方案,代码用一套,代码中的配置信息根据不同国家采用不同配置,数据用多套,即每个国家使用各自独立的数据,每个国家部署独立的机房,这样,对于开发,只需要改一次代码即可。数据标准化,也节省对接成本。</li>\n<li>独立开发电视后台APK的触发升级和灰度升级功能,针对电视型号、用户级别、电视系统采用不同的升级策略。为了节省带宽成本,采用灰度升级,灰度升级原理,设置灰度时间范围,按照当前时间的百分比,算出时间窗,根据电视的deviceid的hash值算出是否落入时间窗范围内。</li>\n</ol>\n<h3 id=\"2014-8-2015-10\"><a href=\"#2014-8-2015-10\" class=\"headerlink\" title=\"2014.8 - 2015.10\"></a>2014.8 - 2015.10</h3><ul>\n<li><b>知道创宇 研发部 开发工程师</b></li>\n</ul>\n<ol>\n<li>通过爬虫监控黑客攻击中国政府网站信息,及时给公安部门提供报警信息。</li>\n<li>负责星图项目后端系统,后端存储网站漏洞信息,因为没有自建CDN,所以采用GridFS存储图片等静态数据。</li>\n</ol>\n<h3 id=\"2013-2-2014-8\"><a href=\"#2013-2-2014-8\" class=\"headerlink\" title=\"2013.2 - 2014.8\"></a>2013.2 - 2014.8</h3><ul>\n<li><b>百度 移动游戏 RD</b></li>\n</ul>\n<ol>\n<li>主营业务是移动游戏和应用分发,后台主要用C++语言,利用百度自主研发的UB框架,给客户端和中间层提供接口,支持各种业务。QPS达到3k。</li>\n<li>独立开发棋牌大厅项目,设计用户抢对奖券活动。后台Nginx+Openresty过滤请求流,多台应用server实现应用逻辑,对奖券存储在Redis,利用Redis的事务功能和原子操作实现库存加减。</li>\n<li>MySQL存储资源数据,MongoDB负责接口数据。</li>\n</ol>\n<h3 id=\"2012-10-2013-2\"><a href=\"#2012-10-2013-2\" class=\"headerlink\" title=\"2012.10 - 2013.2\"></a>2012.10 - 2013.2</h3><ul>\n<li><b>恒生电子 银行事业部 C后端开发工程师</b><br>负责银行理财销售系统低柜开发。</li>\n</ul>\n<h1 id=\"联系方式\"><a href=\"#联系方式\" class=\"headerlink\" title=\"联系方式\"></a>联系方式</h1><ul>\n<li><b>电子邮箱</b><br><a href=\"mailto:[email protected]\" target=\"_blank\" rel=\"noopener\">[email protected]</a></li>\n<li><b>微信</b><br>zhengxiexie</li>\n<li><b>QQ</b><br>373618217</li>\n<li><b>个人博客</b><br><a href=\"https://zhengxiexie.github.io/\">https://zhengxiexie.github.io/</a></li>\n</ul>\n"}],"Post":[{"title":"宋词四首诵读","top":false,"cover":true,"toc":true,"mathjax":true,"date":"2019-11-12T02:30:31.000Z","password":null,"summary":null,"_content":"\n# 宋词四首诵读\n<br><br>\n\n![](1.jpg) <br><br><br><br>\n<div align=\"middle\"><iframe frameborder=\"no\" border=\"0\" marginwidth=\"0\" marginheight=\"0\" width=330 height=86 src=\"//music.163.com/outchain/player?type=3&id=2064080434&auto=1&height=66\"></iframe></iframe></div><br>\n<br><br><br><br>\n\n\n##### 《蝶恋花·槛菊愁烟兰泣露》 晏殊 <br><br>\n槛菊愁烟兰泣露, 罗幕轻寒, 燕子双飞去。 明月不谙离恨苦, 斜光到晓穿朱户。 \n昨夜西凤凋碧树, 独上高楼, 望尽天涯路。 欲寄彩笼兼尺素, 山长水阔知何处! <br><br><br><br>\n\n##### 《蝶恋花·伫倚危楼风细细》 柳永 <br><br>\n伫倚危楼风细细, 望极春愁, 黯黯生天际。 草色烟光残照里, 无言谁会凭阑意。 \n拟把疏狂图一醉, 对酒当歌, 强乐还无味。 衣带渐宽终不悔, 为伊消得人憔悴。 <br><br><br><br>\n\n##### 《青玉案·元夕》辛弃疾 <br><br>\n东风夜放花千树, 更吹落, 星如雨。 宝马雕车香满路, 凤萧声动, 玉壶光转, 一夜鱼龙舞。 \n峨儿雪柳黄金缕, 笑语盈盈暗香去。 众里寻他千百度, 蓦然回首, 那人却在, 灯火阑珊处。 <br><br><br><br>\n\n##### 《虞美人·听雨》蒋捷 <br><br>\n少年听雨歌楼上。 红烛昏罗帐。 壮年听雨客舟中。 江阔云低, 断雁叫西风。\n而今听雨僧庐下。 鬓已星星也。 悲欢离合总无情。一任阶前, 点滴到天明。 <br><br><br><br>\n","source":"_posts/songcisishou.md","raw":"---\ntitle: 宋词四首诵读\ntop: false\ncover: true\ntoc: true\nmathjax: true\ndate: 2019-11-12 10:30:31\npassword:\nsummary:\ntags: 诗歌\ncategories: 诗歌\n---\n\n# 宋词四首诵读\n<br><br>\n\n![](1.jpg) <br><br><br><br>\n<div align=\"middle\"><iframe frameborder=\"no\" border=\"0\" marginwidth=\"0\" marginheight=\"0\" width=330 height=86 src=\"//music.163.com/outchain/player?type=3&id=2064080434&auto=1&height=66\"></iframe></iframe></div><br>\n<br><br><br><br>\n\n\n##### 《蝶恋花·槛菊愁烟兰泣露》 晏殊 <br><br>\n槛菊愁烟兰泣露, 罗幕轻寒, 燕子双飞去。 明月不谙离恨苦, 斜光到晓穿朱户。 \n昨夜西凤凋碧树, 独上高楼, 望尽天涯路。 欲寄彩笼兼尺素, 山长水阔知何处! <br><br><br><br>\n\n##### 《蝶恋花·伫倚危楼风细细》 柳永 <br><br>\n伫倚危楼风细细, 望极春愁, 黯黯生天际。 草色烟光残照里, 无言谁会凭阑意。 \n拟把疏狂图一醉, 对酒当歌, 强乐还无味。 衣带渐宽终不悔, 为伊消得人憔悴。 <br><br><br><br>\n\n##### 《青玉案·元夕》辛弃疾 <br><br>\n东风夜放花千树, 更吹落, 星如雨。 宝马雕车香满路, 凤萧声动, 玉壶光转, 一夜鱼龙舞。 \n峨儿雪柳黄金缕, 笑语盈盈暗香去。 众里寻他千百度, 蓦然回首, 那人却在, 灯火阑珊处。 <br><br><br><br>\n\n##### 《虞美人·听雨》蒋捷 <br><br>\n少年听雨歌楼上。 红烛昏罗帐。 壮年听雨客舟中。 江阔云低, 断雁叫西风。\n而今听雨僧庐下。 鬓已星星也。 悲欢离合总无情。一任阶前, 点滴到天明。 <br><br><br><br>\n","slug":"songcisishou","published":1,"updated":"2022-11-18T07:58:21.550Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clcvfoh2j000250pq4ov0y6tn","content":"<h1 id=\"宋词四首诵读\"><a href=\"#宋词四首诵读\" class=\"headerlink\" title=\"宋词四首诵读\"></a>宋词四首诵读</h1><p><br><br></p>\n<p><img src=\"1.jpg\" alt> <br><br><br><br></p>\n<div align=\"middle\"><iframe frameborder=\"no\" border=\"0\" marginwidth=\"0\" marginheight=\"0\" width=\"330\" height=\"86\" src=\"//music.163.com/outchain/player?type=3&id=2064080434&auto=1&height=66\"></iframe></div><br>\n<br><br><br><br>\n\n\n<h5 id=\"《蝶恋花·槛菊愁烟兰泣露》-晏殊\"><a href=\"#《蝶恋花·槛菊愁烟兰泣露》-晏殊\" class=\"headerlink\" title=\"《蝶恋花·槛菊愁烟兰泣露》 晏殊 \"></a>《蝶恋花·槛菊愁烟兰泣露》 晏殊 <br><br></h5><p>槛菊愁烟兰泣露, 罗幕轻寒, 燕子双飞去。 明月不谙离恨苦, 斜光到晓穿朱户。<br>昨夜西凤凋碧树, 独上高楼, 望尽天涯路。 欲寄彩笼兼尺素, 山长水阔知何处! <br><br><br><br></p>\n<h5 id=\"《蝶恋花·伫倚危楼风细细》-柳永\"><a href=\"#《蝶恋花·伫倚危楼风细细》-柳永\" class=\"headerlink\" title=\"《蝶恋花·伫倚危楼风细细》 柳永 \"></a>《蝶恋花·伫倚危楼风细细》 柳永 <br><br></h5><p>伫倚危楼风细细, 望极春愁, 黯黯生天际。 草色烟光残照里, 无言谁会凭阑意。<br>拟把疏狂图一醉, 对酒当歌, 强乐还无味。 衣带渐宽终不悔, 为伊消得人憔悴。 <br><br><br><br></p>\n<h5 id=\"《青玉案·元夕》辛弃疾\"><a href=\"#《青玉案·元夕》辛弃疾\" class=\"headerlink\" title=\"《青玉案·元夕》辛弃疾 \"></a>《青玉案·元夕》辛弃疾 <br><br></h5><p>东风夜放花千树, 更吹落, 星如雨。 宝马雕车香满路, 凤萧声动, 玉壶光转, 一夜鱼龙舞。<br>峨儿雪柳黄金缕, 笑语盈盈暗香去。 众里寻他千百度, 蓦然回首, 那人却在, 灯火阑珊处。 <br><br><br><br></p>\n<h5 id=\"《虞美人·听雨》蒋捷\"><a href=\"#《虞美人·听雨》蒋捷\" class=\"headerlink\" title=\"《虞美人·听雨》蒋捷 \"></a>《虞美人·听雨》蒋捷 <br><br></h5><p>少年听雨歌楼上。 红烛昏罗帐。 壮年听雨客舟中。 江阔云低, 断雁叫西风。<br>而今听雨僧庐下。 鬓已星星也。 悲欢离合总无情。一任阶前, 点滴到天明。 <br><br><br><br></p>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"宋词四首诵读\"><a href=\"#宋词四首诵读\" class=\"headerlink\" title=\"宋词四首诵读\"></a>宋词四首诵读</h1><p><br><br></p>\n<p><img src=\"1.jpg\" alt> <br><br><br><br></p>\n<div align=\"middle\"><iframe frameborder=\"no\" border=\"0\" marginwidth=\"0\" marginheight=\"0\" width=\"330\" height=\"86\" src=\"//music.163.com/outchain/player?type=3&id=2064080434&auto=1&height=66\"></iframe></div><br>\n<br><br><br><br>\n\n\n<h5 id=\"《蝶恋花·槛菊愁烟兰泣露》-晏殊\"><a href=\"#《蝶恋花·槛菊愁烟兰泣露》-晏殊\" class=\"headerlink\" title=\"《蝶恋花·槛菊愁烟兰泣露》 晏殊 \"></a>《蝶恋花·槛菊愁烟兰泣露》 晏殊 <br><br></h5><p>槛菊愁烟兰泣露, 罗幕轻寒, 燕子双飞去。 明月不谙离恨苦, 斜光到晓穿朱户。<br>昨夜西凤凋碧树, 独上高楼, 望尽天涯路。 欲寄彩笼兼尺素, 山长水阔知何处! <br><br><br><br></p>\n<h5 id=\"《蝶恋花·伫倚危楼风细细》-柳永\"><a href=\"#《蝶恋花·伫倚危楼风细细》-柳永\" class=\"headerlink\" title=\"《蝶恋花·伫倚危楼风细细》 柳永 \"></a>《蝶恋花·伫倚危楼风细细》 柳永 <br><br></h5><p>伫倚危楼风细细, 望极春愁, 黯黯生天际。 草色烟光残照里, 无言谁会凭阑意。<br>拟把疏狂图一醉, 对酒当歌, 强乐还无味。 衣带渐宽终不悔, 为伊消得人憔悴。 <br><br><br><br></p>\n<h5 id=\"《青玉案·元夕》辛弃疾\"><a href=\"#《青玉案·元夕》辛弃疾\" class=\"headerlink\" title=\"《青玉案·元夕》辛弃疾 \"></a>《青玉案·元夕》辛弃疾 <br><br></h5><p>东风夜放花千树, 更吹落, 星如雨。 宝马雕车香满路, 凤萧声动, 玉壶光转, 一夜鱼龙舞。<br>峨儿雪柳黄金缕, 笑语盈盈暗香去。 众里寻他千百度, 蓦然回首, 那人却在, 灯火阑珊处。 <br><br><br><br></p>\n<h5 id=\"《虞美人·听雨》蒋捷\"><a href=\"#《虞美人·听雨》蒋捷\" class=\"headerlink\" title=\"《虞美人·听雨》蒋捷 \"></a>《虞美人·听雨》蒋捷 <br><br></h5><p>少年听雨歌楼上。 红烛昏罗帐。 壮年听雨客舟中。 江阔云低, 断雁叫西风。<br>而今听雨僧庐下。 鬓已星星也。 悲欢离合总无情。一任阶前, 点滴到天明。 <br><br><br><br></p>\n"},{"title":"暮秋入冬琐语","top":false,"cover":true,"img":"/medias/featureimages/5.jpg","toc":true,"mathjax":true,"date":"2019-11-03T13:24:54.000Z","password":null,"summary":null,"_content":"\n# 暮秋入冬琐语\n<br><br>\n<div align=\"middle\"><iframe frameborder=\"no\" border=\"0\" marginwidth=\"0\" marginheight=\"0\" width=330 height=86 src=\"//music.163.com/outchain/player?type=2&id=5261426&auto=1&height=66\"></iframe></div><br>\n\n自古逢秋悲寂寥,在古人心里,似乎秋天就是一个容易伤感的季节,可是,北京的秋天天朗气清、心旷神怡,反而是一个极度舒适的天气。<br> \n周末下起丝丝清冷的秋雨,我想我应该静下来,静下来写点东西,静下来想一个人。<br>\n人过而立,提醒自己长大的并不是自己的颈椎和腰椎盘,而是亲人们一个接一个的离去。小时候,为赋新词强说愁,直到身边的亲人越来越少,才发现幸福并不是人生的常态。三爹、爷爷、伯伯、姨妈、姑爹相继离世,外公现在也躺在床上几月有余,远在北京的我根本无法做点什么,只能努力让自己的生活快乐一点,好让父母放心,也给他们少一点麻烦。<br>\n北京的生活并没有那么五彩缤纷,是单调的、是孤独的,虽然如此,但也是充实的。有时候想一想,如果承认生来孤独,承认生命的底色是悲凉的,像叔本华的哲学一样,也许人就不会变得那么矫情和自寻烦恼,毕竟生活里遇到的一点点快乐和善意就足够让自己感激。<br>\n然而,我并不是太赞成叔本华的哲学,相反,我更欣赏罗素的富有逻辑和理性的追求幸福的哲学。像苏东坡一样,我把罗素和他归在同一类人的中间,他们把自己的生活活出了趣味,让后来的人对他们高山仰止,明白如何更加智慧,如何更加勤奋地追求知识避免自己遭遇各种不幸。<br>\n平心而论,我还是很喜欢程序猿这种工作,主要是因为人际关系简单。入行七年,基本上对于工作遇到的问题能够淡定处理。计算机属于工科科学,讲究逻辑和严密,工程学提高了科技水平,我现在 30 岁,也是一路见证了中国这三十年巨大的飞跃,但窃以为现在中国面临着一个亟待解决的问题,那就是当人们满足了基本的物质生活之后,拿什么填补与日俱增的生活空虚。在古代,是有琴棋书画来排忧解闷的,而如今,难道只有微博抖音?窃以为,生命的本质意义还是在于文学和艺术,若不然,纵一时稍闲,便贪淫恋色、好货寻愁,不但如此,还时常怀不足知心。<br>\n麻痹自己、欺骗自己虽然有时候不是什么坏事,但终究不是长久之计,小时候听到的乌托邦,年轻时经历的美丽骗局,终于不能改变生活就是一个悲剧的这个事实。年岁愈长,越能看出你自己心性的修炼程度。每天都得三省吾身,因为在这个社会里,稍不留神,就会变得一身油腻、满腔戾气。<br>\n事实证明,没有平静,就不可能收获真正的幸福。锻炼身体没?看书学习没?还没?那你怎么还在刷手机?<br>\n经历过几次相亲,因为不抱任何期待,所以也就能平和地接受。在父母面前,自己总是吊儿郎当,可谁知道,繁华世界,你我俗人,又有谁真正喜欢孤独?我所能做的,只能独自等待,盼望着、盼望着,一个温柔恬静的你在某个角落出现,我们相视一笑,让我对你诉说内心涌动的快乐,心有灵犀的感激。<br>\n![](1.jpg)\n![](2.jpg)\n![](3.jpg)\n>**感谢小米书法协会会长柴海军大佬还挂念着我,赠给鄙人的墨宝,能一睹大师风采,实乃三生有幸。**\n","source":"_posts/暮秋入冬琐语.md","raw":"---\ntitle: 暮秋入冬琐语\ntop: false\ncover: true\nimg: /medias/featureimages/5.jpg\ntoc: true\nmathjax: true\ndate: 2019-11-03 21:24:54\npassword:\nsummary:\ntags: 散文\ncategories: 散文\n---\n\n# 暮秋入冬琐语\n<br><br>\n<div align=\"middle\"><iframe frameborder=\"no\" border=\"0\" marginwidth=\"0\" marginheight=\"0\" width=330 height=86 src=\"//music.163.com/outchain/player?type=2&id=5261426&auto=1&height=66\"></iframe></div><br>\n\n自古逢秋悲寂寥,在古人心里,似乎秋天就是一个容易伤感的季节,可是,北京的秋天天朗气清、心旷神怡,反而是一个极度舒适的天气。<br> \n周末下起丝丝清冷的秋雨,我想我应该静下来,静下来写点东西,静下来想一个人。<br>\n人过而立,提醒自己长大的并不是自己的颈椎和腰椎盘,而是亲人们一个接一个的离去。小时候,为赋新词强说愁,直到身边的亲人越来越少,才发现幸福并不是人生的常态。三爹、爷爷、伯伯、姨妈、姑爹相继离世,外公现在也躺在床上几月有余,远在北京的我根本无法做点什么,只能努力让自己的生活快乐一点,好让父母放心,也给他们少一点麻烦。<br>\n北京的生活并没有那么五彩缤纷,是单调的、是孤独的,虽然如此,但也是充实的。有时候想一想,如果承认生来孤独,承认生命的底色是悲凉的,像叔本华的哲学一样,也许人就不会变得那么矫情和自寻烦恼,毕竟生活里遇到的一点点快乐和善意就足够让自己感激。<br>\n然而,我并不是太赞成叔本华的哲学,相反,我更欣赏罗素的富有逻辑和理性的追求幸福的哲学。像苏东坡一样,我把罗素和他归在同一类人的中间,他们把自己的生活活出了趣味,让后来的人对他们高山仰止,明白如何更加智慧,如何更加勤奋地追求知识避免自己遭遇各种不幸。<br>\n平心而论,我还是很喜欢程序猿这种工作,主要是因为人际关系简单。入行七年,基本上对于工作遇到的问题能够淡定处理。计算机属于工科科学,讲究逻辑和严密,工程学提高了科技水平,我现在 30 岁,也是一路见证了中国这三十年巨大的飞跃,但窃以为现在中国面临着一个亟待解决的问题,那就是当人们满足了基本的物质生活之后,拿什么填补与日俱增的生活空虚。在古代,是有琴棋书画来排忧解闷的,而如今,难道只有微博抖音?窃以为,生命的本质意义还是在于文学和艺术,若不然,纵一时稍闲,便贪淫恋色、好货寻愁,不但如此,还时常怀不足知心。<br>\n麻痹自己、欺骗自己虽然有时候不是什么坏事,但终究不是长久之计,小时候听到的乌托邦,年轻时经历的美丽骗局,终于不能改变生活就是一个悲剧的这个事实。年岁愈长,越能看出你自己心性的修炼程度。每天都得三省吾身,因为在这个社会里,稍不留神,就会变得一身油腻、满腔戾气。<br>\n事实证明,没有平静,就不可能收获真正的幸福。锻炼身体没?看书学习没?还没?那你怎么还在刷手机?<br>\n经历过几次相亲,因为不抱任何期待,所以也就能平和地接受。在父母面前,自己总是吊儿郎当,可谁知道,繁华世界,你我俗人,又有谁真正喜欢孤独?我所能做的,只能独自等待,盼望着、盼望着,一个温柔恬静的你在某个角落出现,我们相视一笑,让我对你诉说内心涌动的快乐,心有灵犀的感激。<br>\n![](1.jpg)\n![](2.jpg)\n![](3.jpg)\n>**感谢小米书法协会会长柴海军大佬还挂念着我,赠给鄙人的墨宝,能一睹大师风采,实乃三生有幸。**\n","slug":"暮秋入冬琐语","published":1,"updated":"2022-11-18T07:58:21.554Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clcvfoh2q000450pqpuclutae","content":"<h1 id=\"暮秋入冬琐语\"><a href=\"#暮秋入冬琐语\" class=\"headerlink\" title=\"暮秋入冬琐语\"></a>暮秋入冬琐语</h1><p><br><br></p>\n<div align=\"middle\"><iframe frameborder=\"no\" border=\"0\" marginwidth=\"0\" marginheight=\"0\" width=\"330\" height=\"86\" src=\"//music.163.com/outchain/player?type=2&id=5261426&auto=1&height=66\"></iframe></div><br>\n\n<p>自古逢秋悲寂寥,在古人心里,似乎秋天就是一个容易伤感的季节,可是,北京的秋天天朗气清、心旷神怡,反而是一个极度舒适的天气。<br><br>周末下起丝丝清冷的秋雨,我想我应该静下来,静下来写点东西,静下来想一个人。<br><br>人过而立,提醒自己长大的并不是自己的颈椎和腰椎盘,而是亲人们一个接一个的离去。小时候,为赋新词强说愁,直到身边的亲人越来越少,才发现幸福并不是人生的常态。三爹、爷爷、伯伯、姨妈、姑爹相继离世,外公现在也躺在床上几月有余,远在北京的我根本无法做点什么,只能努力让自己的生活快乐一点,好让父母放心,也给他们少一点麻烦。<br><br>北京的生活并没有那么五彩缤纷,是单调的、是孤独的,虽然如此,但也是充实的。有时候想一想,如果承认生来孤独,承认生命的底色是悲凉的,像叔本华的哲学一样,也许人就不会变得那么矫情和自寻烦恼,毕竟生活里遇到的一点点快乐和善意就足够让自己感激。<br><br>然而,我并不是太赞成叔本华的哲学,相反,我更欣赏罗素的富有逻辑和理性的追求幸福的哲学。像苏东坡一样,我把罗素和他归在同一类人的中间,他们把自己的生活活出了趣味,让后来的人对他们高山仰止,明白如何更加智慧,如何更加勤奋地追求知识避免自己遭遇各种不幸。<br><br>平心而论,我还是很喜欢程序猿这种工作,主要是因为人际关系简单。入行七年,基本上对于工作遇到的问题能够淡定处理。计算机属于工科科学,讲究逻辑和严密,工程学提高了科技水平,我现在 30 岁,也是一路见证了中国这三十年巨大的飞跃,但窃以为现在中国面临着一个亟待解决的问题,那就是当人们满足了基本的物质生活之后,拿什么填补与日俱增的生活空虚。在古代,是有琴棋书画来排忧解闷的,而如今,难道只有微博抖音?窃以为,生命的本质意义还是在于文学和艺术,若不然,纵一时稍闲,便贪淫恋色、好货寻愁,不但如此,还时常怀不足知心。<br><br>麻痹自己、欺骗自己虽然有时候不是什么坏事,但终究不是长久之计,小时候听到的乌托邦,年轻时经历的美丽骗局,终于不能改变生活就是一个悲剧的这个事实。年岁愈长,越能看出你自己心性的修炼程度。每天都得三省吾身,因为在这个社会里,稍不留神,就会变得一身油腻、满腔戾气。<br><br>事实证明,没有平静,就不可能收获真正的幸福。锻炼身体没?看书学习没?还没?那你怎么还在刷手机?<br><br>经历过几次相亲,因为不抱任何期待,所以也就能平和地接受。在父母面前,自己总是吊儿郎当,可谁知道,繁华世界,你我俗人,又有谁真正喜欢孤独?我所能做的,只能独自等待,盼望着、盼望着,一个温柔恬静的你在某个角落出现,我们相视一笑,让我对你诉说内心涌动的快乐,心有灵犀的感激。<br><br><img src=\"1.jpg\" alt><br><img src=\"2.jpg\" alt><br><img src=\"3.jpg\" alt></p>\n<blockquote>\n<p><strong>感谢小米书法协会会长柴海军大佬还挂念着我,赠给鄙人的墨宝,能一睹大师风采,实乃三生有幸。</strong></p>\n</blockquote>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"暮秋入冬琐语\"><a href=\"#暮秋入冬琐语\" class=\"headerlink\" title=\"暮秋入冬琐语\"></a>暮秋入冬琐语</h1><p><br><br></p>\n<div align=\"middle\"><iframe frameborder=\"no\" border=\"0\" marginwidth=\"0\" marginheight=\"0\" width=\"330\" height=\"86\" src=\"//music.163.com/outchain/player?type=2&id=5261426&auto=1&height=66\"></iframe></div><br>\n\n<p>自古逢秋悲寂寥,在古人心里,似乎秋天就是一个容易伤感的季节,可是,北京的秋天天朗气清、心旷神怡,反而是一个极度舒适的天气。<br><br>周末下起丝丝清冷的秋雨,我想我应该静下来,静下来写点东西,静下来想一个人。<br><br>人过而立,提醒自己长大的并不是自己的颈椎和腰椎盘,而是亲人们一个接一个的离去。小时候,为赋新词强说愁,直到身边的亲人越来越少,才发现幸福并不是人生的常态。三爹、爷爷、伯伯、姨妈、姑爹相继离世,外公现在也躺在床上几月有余,远在北京的我根本无法做点什么,只能努力让自己的生活快乐一点,好让父母放心,也给他们少一点麻烦。<br><br>北京的生活并没有那么五彩缤纷,是单调的、是孤独的,虽然如此,但也是充实的。有时候想一想,如果承认生来孤独,承认生命的底色是悲凉的,像叔本华的哲学一样,也许人就不会变得那么矫情和自寻烦恼,毕竟生活里遇到的一点点快乐和善意就足够让自己感激。<br><br>然而,我并不是太赞成叔本华的哲学,相反,我更欣赏罗素的富有逻辑和理性的追求幸福的哲学。像苏东坡一样,我把罗素和他归在同一类人的中间,他们把自己的生活活出了趣味,让后来的人对他们高山仰止,明白如何更加智慧,如何更加勤奋地追求知识避免自己遭遇各种不幸。<br><br>平心而论,我还是很喜欢程序猿这种工作,主要是因为人际关系简单。入行七年,基本上对于工作遇到的问题能够淡定处理。计算机属于工科科学,讲究逻辑和严密,工程学提高了科技水平,我现在 30 岁,也是一路见证了中国这三十年巨大的飞跃,但窃以为现在中国面临着一个亟待解决的问题,那就是当人们满足了基本的物质生活之后,拿什么填补与日俱增的生活空虚。在古代,是有琴棋书画来排忧解闷的,而如今,难道只有微博抖音?窃以为,生命的本质意义还是在于文学和艺术,若不然,纵一时稍闲,便贪淫恋色、好货寻愁,不但如此,还时常怀不足知心。<br><br>麻痹自己、欺骗自己虽然有时候不是什么坏事,但终究不是长久之计,小时候听到的乌托邦,年轻时经历的美丽骗局,终于不能改变生活就是一个悲剧的这个事实。年岁愈长,越能看出你自己心性的修炼程度。每天都得三省吾身,因为在这个社会里,稍不留神,就会变得一身油腻、满腔戾气。<br><br>事实证明,没有平静,就不可能收获真正的幸福。锻炼身体没?看书学习没?还没?那你怎么还在刷手机?<br><br>经历过几次相亲,因为不抱任何期待,所以也就能平和地接受。在父母面前,自己总是吊儿郎当,可谁知道,繁华世界,你我俗人,又有谁真正喜欢孤独?我所能做的,只能独自等待,盼望着、盼望着,一个温柔恬静的你在某个角落出现,我们相视一笑,让我对你诉说内心涌动的快乐,心有灵犀的感激。<br><br><img src=\"1.jpg\" alt><br><img src=\"2.jpg\" alt><br><img src=\"3.jpg\" alt></p>\n<blockquote>\n<p><strong>感谢小米书法协会会长柴海军大佬还挂念着我,赠给鄙人的墨宝,能一睹大师风采,实乃三生有幸。</strong></p>\n</blockquote>\n"},{"title":"浅谈 CAP 和 Paxos 共识算法","top":false,"cover":true,"img":"/medias/featureimages/4.jpg","toc":true,"mathjax":true,"date":"2019-11-13T11:04:00.000Z","password":null,"summary":null,"_content":"\n# 浅谈 CAP 和 Paxos 共识算法\n\n分布式共识是整个分布式系统中最为重要的问题,没有之一,本人想按照自己的理解用大白话讲一讲,既然是大白话,就非常不严谨,也很粗浅,有说的不对的地方,欢迎大佬拍砖,头盔已戴好。\n\n分布式、CAP、一致性、状态机、共识、Paxos、Raft、ZAB,想必这些名词大家已经烂熟于耳了,在感叹这些高逼格名词的同时,你是不是总感觉这些名词有点混淆不清、模棱两可的赶脚?如果有,请听我慢慢道来。(没有?好吧,您是大佬,请果断 command+w。)\n\n---\n\n# 什么是 CAP\n\n![](Distributed_system_CAP-iteblog-ac864baa-9770-40b5-aaf0-432e011fafc6.png)\n\nCAP 理论的背景介绍已经烂大街了,这里不过多介绍。我们谈谈如何理解它的问题,关于这方面,我觉得解释最清楚的是油管上某个小哥的视频:\n\n[https://www.youtube.com/watch?v=Jw1iFr4v58M](https://www.youtube.com/watch?v=Jw1iFr4v58M)\n\n## 用人话解释三个名词:\n\n### **一致性**\n\n如果刚刚向一个节点写入,那么之后,从另外一个节点读取的必须是刚刚写入的数据,不能是更老的数据。\n\n### **可用性**\n\n如果请求一个节点,这个节点必须能够给予回复,如果节点挂掉了,那就谈不上可用性了。\n\n### **分区容忍性**\n\n是否容忍网络分区,即可以允许节点和其它节点无法通信。\n\nCAP 的意思就是说我们最多只能保证其中两个条件同时成立。\n\n下面我们来看看为什么。\n\n![](Untitled-75e05e42-d661-4446-9120-ae13749b1535.png)\n\n如图所示,假如我们满足了分区容忍性,即虚线处表示两个节点发生了分区。\n\n1. **假如要满足一致性**,那么,我们只能让请求另一个节点的操作暂时 hang 住,返回 client 失败或者超时的结果,这种情况多发生在银行柜台等对数据一致性要求很高的情境下,因为比起保证用户资金数目的正确性比暂时让用户无法操作要更重要一些。\n2. **假如要满足可用性**,因为网络已经隔离,也就没办法达到一致性,这种情况多发生在互联网行业中,比如新闻等对数据一致性要求不高但对可用性要求高的情况下,毕竟,用户压根看不了新闻比看不到及时新闻要重要的多。\n\n大家可以自己自由组合,最终会证明,三种条件不可能同时满足,其实大部分情况下,我们都是在一致性和可用性之间取舍而已。\n\n![](Untitled-de737321-ffd8-4e8d-b3f7-3d5483db237e.png)\n\n# Consistency = Consensus?\n\nConsistency几乎被业界用烂了,以至于当我们在讨论一致性的时候,其实我们都无法确定对方所说的一致性是不是和自己的那个一致。😅\n\n**Consistency:一致性,Consensus:协同,**这两个概念极容易混淆。\n\n我们常说的一致性(Consistency)在分布式系统中指的是对于同一个数据的多个副本,其对外表现的数据一致性,如线性一致性、因果一致性、最终一致性等,都是用来描述副本问题中的一致性的。而共识(Consensus)则不同,简单来说,共识问题是要经过某种算法使多个节点达成相同状态的一个过程。在我看来,一致性强调结果,共识强调过程。\n\n![](Distributed_system_Consistency_model-iteblog-392cde62-0df4-41ab-a200-8699a871dd03.jpg)\n\n# 共识?状态机?什么鬼?\n\n![](Untitled-a17735d5-49dd-4565-8bbf-271c080e18a5.png)\n\nKen Thompson\n\n共识有个更高逼格的称呼:\n\n### 基于状态机复制的共识算法\n\n大牛们最擅长做的事就是把各种简单的问题用个高逼格的专业术语把你拒之门外,就好比 CCAV 里的各种指数其实说白了就是告诉你央行大妈又要放水了。\n\n那么,状态机是什么?\n\n状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。\n\n说人话,好不?好,看下图,门,有两种状态,开着的和关着的。因此,在我看来状态是一种静态的场景,而转换赋予了其动态的变化。\n\n![](Untitled-b4f0cf74-00d2-4eba-968f-619a4ed257da.png)\n\n以此类比一下,如果一个节点当前的数据是 X,现在有了 add+1 的操作日志来了,那么现在的状态就是 X+1,好了,状态(X)有了,变化(操作日志)有了,这就是状态机。\n\n分布式共识,简单来说,就是在一个或多个节点提议了一个状态应当是什么后,系统中所有节点对这个状态达成一致意见的整个过程。\n\n共识是过程,一致是结果,明白了吗?\n\n# 共识模型\n\n## 主从同步:\n\n![](Untitled-9ad779df-cde7-402f-8ca0-31cf1807e0e7.png)\n\n我们都知道MySQL等业界常见数据库的主从同步(Master-Slave Replication),主从同步分三个阶段:\n\n- Master 接受写请求\n- Master 复制日志至 Slave\n- Master 等待,直到**所有从库**返回。\n\n可见,主从同步模型存在致命问题:只要一个节点失败,则 Master 就会阻塞,导致整个集群不可用,保证了一致性,可用性缺大大降低了。\n\n## 多数派:\n\n每次写入大于 N/2个节点,每次读也保证从 N/2个节点中读。多数派的模型看似完美解决了多节点的一致性问题,不就是性能差点嘛,可是在并发的情况下就不一定了,如下图:\n\n![](Untitled-43522eca-aed6-4148-bc7c-499ba25e2284.png)\n\n在并发环境下,因为每个节点的操作日志写入顺序无法保证一致,也就无法保证最终的一致性。如图,都是向三个节点 inc5、set0 两个操作,但因为顺序不一样,最终状态两个是 0,一个是 5。因此我们需要引入一种机制,给每个操作日志编上号,这个号从小到大生成,这样,每个节点就不会弄错。(是否想到了网络中的分包与重组?)那么,现在关键问题又来了,怎么协同这个编号?貌似这是鸡生蛋、蛋生鸡的问题。😂\n\n# Paxos\n\nPaxos 模型试图探讨分布式共识问题的一个更一般的形式。\n\nLesile Lamport,Latex的发明者,提出了 Paxos算法。他虚拟了一个叫做 Paxos 的希腊城邦,这个岛按照议会民主制的政治模式制定法律,但是没有人愿意将自己的全部时间和精力放在这件事上。所以无论是议员、议长或者传递纸条的服务员都不能承诺别人需要时一定会出现,也无法承诺批准决议后者传递消息的时间。由于Paxos 让人太难以理解,Lamport觉得同行不能理解他的幽默感,于是后来又重新发表了朴实的算法描述版本[《Paxos Made Simple》](https://www.notion.so/CAP-Paxos-55dad97e36154e20895e26495fff49ec#891d9af87884442fbf2adaa36b9f9454)。\n\n![](Untitled-4a4eaa95-1ce8-4bbd-89c9-700ad82641db.png)\n\n该共识算法就整体来说,存在两个阶段,如图,第一个阶段是提议,第二个阶段是决定。\n\n> 分布式系统要做到 fault tolorence,就需要共识模型,而节点达成共识,不仅需要节点之间的算法,还会取决于 client 的行为。比如即使副本系统使用multi-paxos在所有副本服务器上同步了日志序号,但如果Client被允许从非Leader节点写入数据,则整个副本系统仍然不是强一致的。\n\n下面,重头戏来了,详细介绍 Paxos。\n\n### 角色介绍:\n\n**Client:**系统外部角色,请求发起者。如民众。\n\n**Proposer:** 接受Client 请求,向集群提出提议(propose)。并在冲突发生时,起到冲突调节的作用。如议员,替民众提出议案。\n\n**Accpetor:** 提议投票和接收者,只有在形成法定人数(Quorum,即 Majority 多数派)时,提议才会最终被接受。如国会。\n\n**Learner:** 提议接受者,backup,备份,对集群的一致性没影响。如记录员。\n\n### 步骤、阶段:\n\n![](Untitled-a6750265-7683-4067-8d61-206f696acc69.png)\n\n1. **Phase1a: Prepare**\n\n proposer 提出一个议案,编号为 N,N一定大于这个 proposer 之前提出的提案编号,请求 acceptor 的 quorum(大多数) 接受。\n\n2. **Phase1b: Promise**\n\n 如果 N 大于此 acceptor 之前接受的任何提案编号则接受,否则拒绝。\n\n3. **Phase2a: Accept**\n\n 如果达到了多数派,proposer 会发出 accept 请求,此请求包含上一步的提案编号和提案内容。\n\n4. **Phase2b: Accepted**\n\n 如果此 acceptor 在此期间没有收到任何大于 N 的提案,则接受此提案内容,否则忽略。\n\n还记得上文中我们提到过,同步编号是非常重要的问题,绿色框出来的实际上就是同步编号的过程。通过这个编号,就知道每条操作日志的先后顺序。简单说来,**第一阶段,获取编号,第二阶段,写入日志。**可以看出来,Paxos 通过两轮交互,牺牲时间和性能来达到弥补一致性的问题。\n\n现在我们考虑部分节点down 掉的情景。\n\n![](Untitled-9d3289bb-0f85-43cb-913e-5c3690982bf5.png)\n\n由于是多数派 accptor 达成了一致,第一阶段仍然成功获得了编号,所有最终还是成功的。\n\n考虑 proposer down 掉的情景。\n\n![](Untitled-03b14664-4015-4295-9be4-ed16042a68b7.png)\n\n没关系,虽然第一个 proposer 失败,但下一个 proposer 用更大的提案编号,所以下一次 proposer最终还是成功了,仍然保证了可用性和一致性。\n\n### 潜在问题:活锁\n\n![](Untitled-12f560d2-d186-4995-8545-bad7909240b7.png)\n\nPaxos 存在活锁问题。如图,当 第一个proposer 在第一阶段发出请求,还没来得及后续的第二阶段请求,紧接着第二个proposer 在第一阶段也发出请求,如果这样无穷无尽,acceptor 始终停留在决定顺序号的过程上,那大家谁也成功不了,遇到这样的问题,其实很好解决,如果发现顺序号被新的 proposer 更新了,则引入一个随机的等待的超时时间,这样就避免了多个 proposer 发生冲突的问题。\n\n# Multi Paxos\n\n由于Paxos 存在的问题:难实现、效率低(2 轮 rpc)、活锁。\n\n因此又引入了Multi Paxos,Multi Paxos引入 Leader,也就是**唯一的 proposer**,所有的请求都需经过此 Leader。\n\n![](Untitled-2a2f06c4-1305-44ec-98ea-94a532d36d56.png)\n\n因为只有一个节点维护提案编号,这样,就省略了第一轮讨论提议编号的过程。\n\n然后进一步简化角色。\n\n![](Untitled-e36f718a-403c-40fc-adfe-423e7d7e6836.png)\n\nServers 中第左边的就是 Proposer,另外两个和自身充当 acceptor,这样就更像我们真实的系统了。Raft 和 ZAB协议其实基本上和这个一致,两者的差别很小,就是心跳的方向不一样。\n\n# Raft和 ZAB\n\nRaft 和 ZAB 协议将 Multi Paxos 划分了三个子问题:\n\n- Leader Election\n- Log Replication\n- Safety\n\n在 leader 选举的过程中,也重定义角色:\n\n- Leader\n- Follower\n- Candidate\n\n[这个动画网站](http://thesecretlivesofdata.com/raft/)生动展示了 leader 选举和日志复制的过程。在这里就不多讲了。\n\n另外,[raft 官方网站](https://raft.github.io/)可以自己操作模拟选举的过程。\n\n# 总结\n\n今天,我们从 CAP 谈到 Raft 和 ZAB,中间穿插了各种名词,模型无论怎么变化,我们始终只有一个目的,那就是在一个 fault torlerance 的分布式架构下,如何尽量保证其整个系统的可用性和一致性。最理想的模型当然是 Paxos,然而理论到落地还是有差距的,所以诞生了 Raft 和 ZAB,虽然只有一个 leader,但我们允许 leader 挂掉可以重新选举 leader,这样,中心式和分布式达到了一个妥协。<br><br><br><br><br>\n\n\n-------\n\n*参考资料:*\n\n[*http://blog.kongfy.com/2016/08/被误用的一致性/*](http://blog.kongfy.com/2016/08/%E8%A2%AB%E8%AF%AF%E7%94%A8%E7%9A%84%E4%B8%80%E8%87%B4%E6%80%A7/)\n\n[*http://blog.kongfy.com/2016/05/分布式共识consensus:viewstamped、raft及paxos/*](http://blog.kongfy.com/2016/05/%e5%88%86%e5%b8%83%e5%bc%8f%e5%85%b1%e8%af%86consensus%ef%bc%9aviewstamped%e3%80%81raft%e5%8f%8apaxos/)\n\n[*https://lotabout.me/2019/Raft-Consensus-Algorithm/*](https://lotabout.me/2019/Raft-Consensus-Algorithm/)\n\n[*https://raft.github.io/*](https://raft.github.io/)\n\n[*http://thesecretlivesofdata.com/raft/*](http://thesecretlivesofdata.com/raft/)","source":"_posts/consensus.md","raw":"---\ntitle: 浅谈 CAP 和 Paxos 共识算法\ntop: false\ncover: true\nimg: /medias/featureimages/4.jpg\ntoc: true\nmathjax: true\ndate: 2019-11-13 19:04:00\npassword:\nsummary:\ntags: \n - 分布式\n - CAP\n - 共识\n - Paxos\n - Raft\n - ZAB\ncategories: 技术\n---\n\n# 浅谈 CAP 和 Paxos 共识算法\n\n分布式共识是整个分布式系统中最为重要的问题,没有之一,本人想按照自己的理解用大白话讲一讲,既然是大白话,就非常不严谨,也很粗浅,有说的不对的地方,欢迎大佬拍砖,头盔已戴好。\n\n分布式、CAP、一致性、状态机、共识、Paxos、Raft、ZAB,想必这些名词大家已经烂熟于耳了,在感叹这些高逼格名词的同时,你是不是总感觉这些名词有点混淆不清、模棱两可的赶脚?如果有,请听我慢慢道来。(没有?好吧,您是大佬,请果断 command+w。)\n\n---\n\n# 什么是 CAP\n\n![](Distributed_system_CAP-iteblog-ac864baa-9770-40b5-aaf0-432e011fafc6.png)\n\nCAP 理论的背景介绍已经烂大街了,这里不过多介绍。我们谈谈如何理解它的问题,关于这方面,我觉得解释最清楚的是油管上某个小哥的视频:\n\n[https://www.youtube.com/watch?v=Jw1iFr4v58M](https://www.youtube.com/watch?v=Jw1iFr4v58M)\n\n## 用人话解释三个名词:\n\n### **一致性**\n\n如果刚刚向一个节点写入,那么之后,从另外一个节点读取的必须是刚刚写入的数据,不能是更老的数据。\n\n### **可用性**\n\n如果请求一个节点,这个节点必须能够给予回复,如果节点挂掉了,那就谈不上可用性了。\n\n### **分区容忍性**\n\n是否容忍网络分区,即可以允许节点和其它节点无法通信。\n\nCAP 的意思就是说我们最多只能保证其中两个条件同时成立。\n\n下面我们来看看为什么。\n\n![](Untitled-75e05e42-d661-4446-9120-ae13749b1535.png)\n\n如图所示,假如我们满足了分区容忍性,即虚线处表示两个节点发生了分区。\n\n1. **假如要满足一致性**,那么,我们只能让请求另一个节点的操作暂时 hang 住,返回 client 失败或者超时的结果,这种情况多发生在银行柜台等对数据一致性要求很高的情境下,因为比起保证用户资金数目的正确性比暂时让用户无法操作要更重要一些。\n2. **假如要满足可用性**,因为网络已经隔离,也就没办法达到一致性,这种情况多发生在互联网行业中,比如新闻等对数据一致性要求不高但对可用性要求高的情况下,毕竟,用户压根看不了新闻比看不到及时新闻要重要的多。\n\n大家可以自己自由组合,最终会证明,三种条件不可能同时满足,其实大部分情况下,我们都是在一致性和可用性之间取舍而已。\n\n![](Untitled-de737321-ffd8-4e8d-b3f7-3d5483db237e.png)\n\n# Consistency = Consensus?\n\nConsistency几乎被业界用烂了,以至于当我们在讨论一致性的时候,其实我们都无法确定对方所说的一致性是不是和自己的那个一致。😅\n\n**Consistency:一致性,Consensus:协同,**这两个概念极容易混淆。\n\n我们常说的一致性(Consistency)在分布式系统中指的是对于同一个数据的多个副本,其对外表现的数据一致性,如线性一致性、因果一致性、最终一致性等,都是用来描述副本问题中的一致性的。而共识(Consensus)则不同,简单来说,共识问题是要经过某种算法使多个节点达成相同状态的一个过程。在我看来,一致性强调结果,共识强调过程。\n\n![](Distributed_system_Consistency_model-iteblog-392cde62-0df4-41ab-a200-8699a871dd03.jpg)\n\n# 共识?状态机?什么鬼?\n\n![](Untitled-a17735d5-49dd-4565-8bbf-271c080e18a5.png)\n\nKen Thompson\n\n共识有个更高逼格的称呼:\n\n### 基于状态机复制的共识算法\n\n大牛们最擅长做的事就是把各种简单的问题用个高逼格的专业术语把你拒之门外,就好比 CCAV 里的各种指数其实说白了就是告诉你央行大妈又要放水了。\n\n那么,状态机是什么?\n\n状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。\n\n说人话,好不?好,看下图,门,有两种状态,开着的和关着的。因此,在我看来状态是一种静态的场景,而转换赋予了其动态的变化。\n\n![](Untitled-b4f0cf74-00d2-4eba-968f-619a4ed257da.png)\n\n以此类比一下,如果一个节点当前的数据是 X,现在有了 add+1 的操作日志来了,那么现在的状态就是 X+1,好了,状态(X)有了,变化(操作日志)有了,这就是状态机。\n\n分布式共识,简单来说,就是在一个或多个节点提议了一个状态应当是什么后,系统中所有节点对这个状态达成一致意见的整个过程。\n\n共识是过程,一致是结果,明白了吗?\n\n# 共识模型\n\n## 主从同步:\n\n![](Untitled-9ad779df-cde7-402f-8ca0-31cf1807e0e7.png)\n\n我们都知道MySQL等业界常见数据库的主从同步(Master-Slave Replication),主从同步分三个阶段:\n\n- Master 接受写请求\n- Master 复制日志至 Slave\n- Master 等待,直到**所有从库**返回。\n\n可见,主从同步模型存在致命问题:只要一个节点失败,则 Master 就会阻塞,导致整个集群不可用,保证了一致性,可用性缺大大降低了。\n\n## 多数派:\n\n每次写入大于 N/2个节点,每次读也保证从 N/2个节点中读。多数派的模型看似完美解决了多节点的一致性问题,不就是性能差点嘛,可是在并发的情况下就不一定了,如下图:\n\n![](Untitled-43522eca-aed6-4148-bc7c-499ba25e2284.png)\n\n在并发环境下,因为每个节点的操作日志写入顺序无法保证一致,也就无法保证最终的一致性。如图,都是向三个节点 inc5、set0 两个操作,但因为顺序不一样,最终状态两个是 0,一个是 5。因此我们需要引入一种机制,给每个操作日志编上号,这个号从小到大生成,这样,每个节点就不会弄错。(是否想到了网络中的分包与重组?)那么,现在关键问题又来了,怎么协同这个编号?貌似这是鸡生蛋、蛋生鸡的问题。😂\n\n# Paxos\n\nPaxos 模型试图探讨分布式共识问题的一个更一般的形式。\n\nLesile Lamport,Latex的发明者,提出了 Paxos算法。他虚拟了一个叫做 Paxos 的希腊城邦,这个岛按照议会民主制的政治模式制定法律,但是没有人愿意将自己的全部时间和精力放在这件事上。所以无论是议员、议长或者传递纸条的服务员都不能承诺别人需要时一定会出现,也无法承诺批准决议后者传递消息的时间。由于Paxos 让人太难以理解,Lamport觉得同行不能理解他的幽默感,于是后来又重新发表了朴实的算法描述版本[《Paxos Made Simple》](https://www.notion.so/CAP-Paxos-55dad97e36154e20895e26495fff49ec#891d9af87884442fbf2adaa36b9f9454)。\n\n![](Untitled-4a4eaa95-1ce8-4bbd-89c9-700ad82641db.png)\n\n该共识算法就整体来说,存在两个阶段,如图,第一个阶段是提议,第二个阶段是决定。\n\n> 分布式系统要做到 fault tolorence,就需要共识模型,而节点达成共识,不仅需要节点之间的算法,还会取决于 client 的行为。比如即使副本系统使用multi-paxos在所有副本服务器上同步了日志序号,但如果Client被允许从非Leader节点写入数据,则整个副本系统仍然不是强一致的。\n\n下面,重头戏来了,详细介绍 Paxos。\n\n### 角色介绍:\n\n**Client:**系统外部角色,请求发起者。如民众。\n\n**Proposer:** 接受Client 请求,向集群提出提议(propose)。并在冲突发生时,起到冲突调节的作用。如议员,替民众提出议案。\n\n**Accpetor:** 提议投票和接收者,只有在形成法定人数(Quorum,即 Majority 多数派)时,提议才会最终被接受。如国会。\n\n**Learner:** 提议接受者,backup,备份,对集群的一致性没影响。如记录员。\n\n### 步骤、阶段:\n\n![](Untitled-a6750265-7683-4067-8d61-206f696acc69.png)\n\n1. **Phase1a: Prepare**\n\n proposer 提出一个议案,编号为 N,N一定大于这个 proposer 之前提出的提案编号,请求 acceptor 的 quorum(大多数) 接受。\n\n2. **Phase1b: Promise**\n\n 如果 N 大于此 acceptor 之前接受的任何提案编号则接受,否则拒绝。\n\n3. **Phase2a: Accept**\n\n 如果达到了多数派,proposer 会发出 accept 请求,此请求包含上一步的提案编号和提案内容。\n\n4. **Phase2b: Accepted**\n\n 如果此 acceptor 在此期间没有收到任何大于 N 的提案,则接受此提案内容,否则忽略。\n\n还记得上文中我们提到过,同步编号是非常重要的问题,绿色框出来的实际上就是同步编号的过程。通过这个编号,就知道每条操作日志的先后顺序。简单说来,**第一阶段,获取编号,第二阶段,写入日志。**可以看出来,Paxos 通过两轮交互,牺牲时间和性能来达到弥补一致性的问题。\n\n现在我们考虑部分节点down 掉的情景。\n\n![](Untitled-9d3289bb-0f85-43cb-913e-5c3690982bf5.png)\n\n由于是多数派 accptor 达成了一致,第一阶段仍然成功获得了编号,所有最终还是成功的。\n\n考虑 proposer down 掉的情景。\n\n![](Untitled-03b14664-4015-4295-9be4-ed16042a68b7.png)\n\n没关系,虽然第一个 proposer 失败,但下一个 proposer 用更大的提案编号,所以下一次 proposer最终还是成功了,仍然保证了可用性和一致性。\n\n### 潜在问题:活锁\n\n![](Untitled-12f560d2-d186-4995-8545-bad7909240b7.png)\n\nPaxos 存在活锁问题。如图,当 第一个proposer 在第一阶段发出请求,还没来得及后续的第二阶段请求,紧接着第二个proposer 在第一阶段也发出请求,如果这样无穷无尽,acceptor 始终停留在决定顺序号的过程上,那大家谁也成功不了,遇到这样的问题,其实很好解决,如果发现顺序号被新的 proposer 更新了,则引入一个随机的等待的超时时间,这样就避免了多个 proposer 发生冲突的问题。\n\n# Multi Paxos\n\n由于Paxos 存在的问题:难实现、效率低(2 轮 rpc)、活锁。\n\n因此又引入了Multi Paxos,Multi Paxos引入 Leader,也就是**唯一的 proposer**,所有的请求都需经过此 Leader。\n\n![](Untitled-2a2f06c4-1305-44ec-98ea-94a532d36d56.png)\n\n因为只有一个节点维护提案编号,这样,就省略了第一轮讨论提议编号的过程。\n\n然后进一步简化角色。\n\n![](Untitled-e36f718a-403c-40fc-adfe-423e7d7e6836.png)\n\nServers 中第左边的就是 Proposer,另外两个和自身充当 acceptor,这样就更像我们真实的系统了。Raft 和 ZAB协议其实基本上和这个一致,两者的差别很小,就是心跳的方向不一样。\n\n# Raft和 ZAB\n\nRaft 和 ZAB 协议将 Multi Paxos 划分了三个子问题:\n\n- Leader Election\n- Log Replication\n- Safety\n\n在 leader 选举的过程中,也重定义角色:\n\n- Leader\n- Follower\n- Candidate\n\n[这个动画网站](http://thesecretlivesofdata.com/raft/)生动展示了 leader 选举和日志复制的过程。在这里就不多讲了。\n\n另外,[raft 官方网站](https://raft.github.io/)可以自己操作模拟选举的过程。\n\n# 总结\n\n今天,我们从 CAP 谈到 Raft 和 ZAB,中间穿插了各种名词,模型无论怎么变化,我们始终只有一个目的,那就是在一个 fault torlerance 的分布式架构下,如何尽量保证其整个系统的可用性和一致性。最理想的模型当然是 Paxos,然而理论到落地还是有差距的,所以诞生了 Raft 和 ZAB,虽然只有一个 leader,但我们允许 leader 挂掉可以重新选举 leader,这样,中心式和分布式达到了一个妥协。<br><br><br><br><br>\n\n\n-------\n\n*参考资料:*\n\n[*http://blog.kongfy.com/2016/08/被误用的一致性/*](http://blog.kongfy.com/2016/08/%E8%A2%AB%E8%AF%AF%E7%94%A8%E7%9A%84%E4%B8%80%E8%87%B4%E6%80%A7/)\n\n[*http://blog.kongfy.com/2016/05/分布式共识consensus:viewstamped、raft及paxos/*](http://blog.kongfy.com/2016/05/%e5%88%86%e5%b8%83%e5%bc%8f%e5%85%b1%e8%af%86consensus%ef%bc%9aviewstamped%e3%80%81raft%e5%8f%8apaxos/)\n\n[*https://lotabout.me/2019/Raft-Consensus-Algorithm/*](https://lotabout.me/2019/Raft-Consensus-Algorithm/)\n\n[*https://raft.github.io/*](https://raft.github.io/)\n\n[*http://thesecretlivesofdata.com/raft/*](http://thesecretlivesofdata.com/raft/)","slug":"consensus","published":1,"updated":"2022-11-18T07:58:21.454Z","comments":1,"layout":"post","photos":[],"link":"","_id":"clcvfoh2t000750pqm0d3rm98","content":"<h1 id=\"浅谈-CAP-和-Paxos-共识算法\"><a href=\"#浅谈-CAP-和-Paxos-共识算法\" class=\"headerlink\" title=\"浅谈 CAP 和 Paxos 共识算法\"></a>浅谈 CAP 和 Paxos 共识算法</h1><p>分布式共识是整个分布式系统中最为重要的问题,没有之一,本人想按照自己的理解用大白话讲一讲,既然是大白话,就非常不严谨,也很粗浅,有说的不对的地方,欢迎大佬拍砖,头盔已戴好。</p>\n<p>分布式、CAP、一致性、状态机、共识、Paxos、Raft、ZAB,想必这些名词大家已经烂熟于耳了,在感叹这些高逼格名词的同时,你是不是总感觉这些名词有点混淆不清、模棱两可的赶脚?如果有,请听我慢慢道来。(没有?好吧,您是大佬,请果断 command+w。)</p>\n<hr>\n<h1 id=\"什么是-CAP\"><a href=\"#什么是-CAP\" class=\"headerlink\" title=\"什么是 CAP\"></a>什么是 CAP</h1><p><img src=\"Distributed_system_CAP-iteblog-ac864baa-9770-40b5-aaf0-432e011fafc6.png\" alt></p>\n<p>CAP 理论的背景介绍已经烂大街了,这里不过多介绍。我们谈谈如何理解它的问题,关于这方面,我觉得解释最清楚的是油管上某个小哥的视频:</p>\n<p><a href=\"https://www.youtube.com/watch?v=Jw1iFr4v58M\" target=\"_blank\" rel=\"noopener\">https://www.youtube.com/watch?v=Jw1iFr4v58M</a></p>\n<h2 id=\"用人话解释三个名词:\"><a href=\"#用人话解释三个名词:\" class=\"headerlink\" title=\"用人话解释三个名词:\"></a>用人话解释三个名词:</h2><h3 id=\"一致性\"><a href=\"#一致性\" class=\"headerlink\" title=\"一致性\"></a><strong>一致性</strong></h3><p>如果刚刚向一个节点写入,那么之后,从另外一个节点读取的必须是刚刚写入的数据,不能是更老的数据。</p>\n<h3 id=\"可用性\"><a href=\"#可用性\" class=\"headerlink\" title=\"可用性\"></a><strong>可用性</strong></h3><p>如果请求一个节点,这个节点必须能够给予回复,如果节点挂掉了,那就谈不上可用性了。</p>\n<h3 id=\"分区容忍性\"><a href=\"#分区容忍性\" class=\"headerlink\" title=\"分区容忍性\"></a><strong>分区容忍性</strong></h3><p>是否容忍网络分区,即可以允许节点和其它节点无法通信。</p>\n<p>CAP 的意思就是说我们最多只能保证其中两个条件同时成立。</p>\n<p>下面我们来看看为什么。</p>\n<p><img src=\"Untitled-75e05e42-d661-4446-9120-ae13749b1535.png\" alt></p>\n<p>如图所示,假如我们满足了分区容忍性,即虚线处表示两个节点发生了分区。</p>\n<ol>\n<li><strong>假如要满足一致性</strong>,那么,我们只能让请求另一个节点的操作暂时 hang 住,返回 client 失败或者超时的结果,这种情况多发生在银行柜台等对数据一致性要求很高的情境下,因为比起保证用户资金数目的正确性比暂时让用户无法操作要更重要一些。</li>\n<li><strong>假如要满足可用性</strong>,因为网络已经隔离,也就没办法达到一致性,这种情况多发生在互联网行业中,比如新闻等对数据一致性要求不高但对可用性要求高的情况下,毕竟,用户压根看不了新闻比看不到及时新闻要重要的多。</li>\n</ol>\n<p>大家可以自己自由组合,最终会证明,三种条件不可能同时满足,其实大部分情况下,我们都是在一致性和可用性之间取舍而已。</p>\n<p><img src=\"Untitled-de737321-ffd8-4e8d-b3f7-3d5483db237e.png\" alt></p>\n<h1 id=\"Consistency-Consensus\"><a href=\"#Consistency-Consensus\" class=\"headerlink\" title=\"Consistency = Consensus?\"></a>Consistency = Consensus?</h1><p>Consistency几乎被业界用烂了,以至于当我们在讨论一致性的时候,其实我们都无法确定对方所说的一致性是不是和自己的那个一致。😅</p>\n<p><strong>Consistency:一致性,Consensus:协同,</strong>这两个概念极容易混淆。</p>\n<p>我们常说的一致性(Consistency)在分布式系统中指的是对于同一个数据的多个副本,其对外表现的数据一致性,如线性一致性、因果一致性、最终一致性等,都是用来描述副本问题中的一致性的。而共识(Consensus)则不同,简单来说,共识问题是要经过某种算法使多个节点达成相同状态的一个过程。在我看来,一致性强调结果,共识强调过程。</p>\n<p><img src=\"Distributed_system_Consistency_model-iteblog-392cde62-0df4-41ab-a200-8699a871dd03.jpg\" alt></p>\n<h1 id=\"共识?状态机?什么鬼?\"><a href=\"#共识?状态机?什么鬼?\" class=\"headerlink\" title=\"共识?状态机?什么鬼?\"></a>共识?状态机?什么鬼?</h1><p><img src=\"Untitled-a17735d5-49dd-4565-8bbf-271c080e18a5.png\" alt></p>\n<p>Ken Thompson</p>\n<p>共识有个更高逼格的称呼:</p>\n<h3 id=\"基于状态机复制的共识算法\"><a href=\"#基于状态机复制的共识算法\" class=\"headerlink\" title=\"基于状态机复制的共识算法\"></a>基于状态机复制的共识算法</h3><p>大牛们最擅长做的事就是把各种简单的问题用个高逼格的专业术语把你拒之门外,就好比 CCAV 里的各种指数其实说白了就是告诉你央行大妈又要放水了。</p>\n<p>那么,状态机是什么?</p>\n<p>状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。</p>\n<p>说人话,好不?好,看下图,门,有两种状态,开着的和关着的。因此,在我看来状态是一种静态的场景,而转换赋予了其动态的变化。</p>\n<p><img src=\"Untitled-b4f0cf74-00d2-4eba-968f-619a4ed257da.png\" alt></p>\n<p>以此类比一下,如果一个节点当前的数据是 X,现在有了 add+1 的操作日志来了,那么现在的状态就是 X+1,好了,状态(X)有了,变化(操作日志)有了,这就是状态机。</p>\n<p>分布式共识,简单来说,就是在一个或多个节点提议了一个状态应当是什么后,系统中所有节点对这个状态达成一致意见的整个过程。</p>\n<p>共识是过程,一致是结果,明白了吗?</p>\n<h1 id=\"共识模型\"><a href=\"#共识模型\" class=\"headerlink\" title=\"共识模型\"></a>共识模型</h1><h2 id=\"主从同步:\"><a href=\"#主从同步:\" class=\"headerlink\" title=\"主从同步:\"></a>主从同步:</h2><p><img src=\"Untitled-9ad779df-cde7-402f-8ca0-31cf1807e0e7.png\" alt></p>\n<p>我们都知道MySQL等业界常见数据库的主从同步(Master-Slave Replication),主从同步分三个阶段:</p>\n<ul>\n<li>Master 接受写请求</li>\n<li>Master 复制日志至 Slave</li>\n<li>Master 等待,直到<strong>所有从库</strong>返回。</li>\n</ul>\n<p>可见,主从同步模型存在致命问题:只要一个节点失败,则 Master 就会阻塞,导致整个集群不可用,保证了一致性,可用性缺大大降低了。</p>\n<h2 id=\"多数派:\"><a href=\"#多数派:\" class=\"headerlink\" title=\"多数派:\"></a>多数派:</h2><p>每次写入大于 N/2个节点,每次读也保证从 N/2个节点中读。多数派的模型看似完美解决了多节点的一致性问题,不就是性能差点嘛,可是在并发的情况下就不一定了,如下图:</p>\n<p><img src=\"Untitled-43522eca-aed6-4148-bc7c-499ba25e2284.png\" alt></p>\n<p>在并发环境下,因为每个节点的操作日志写入顺序无法保证一致,也就无法保证最终的一致性。如图,都是向三个节点 inc5、set0 两个操作,但因为顺序不一样,最终状态两个是 0,一个是 5。因此我们需要引入一种机制,给每个操作日志编上号,这个号从小到大生成,这样,每个节点就不会弄错。(是否想到了网络中的分包与重组?)那么,现在关键问题又来了,怎么协同这个编号?貌似这是鸡生蛋、蛋生鸡的问题。😂</p>\n<h1 id=\"Paxos\"><a href=\"#Paxos\" class=\"headerlink\" title=\"Paxos\"></a>Paxos</h1><p>Paxos 模型试图探讨分布式共识问题的一个更一般的形式。</p>\n<p>Lesile Lamport,Latex的发明者,提出了 Paxos算法。他虚拟了一个叫做 Paxos 的希腊城邦,这个岛按照议会民主制的政治模式制定法律,但是没有人愿意将自己的全部时间和精力放在这件事上。所以无论是议员、议长或者传递纸条的服务员都不能承诺别人需要时一定会出现,也无法承诺批准决议后者传递消息的时间。由于Paxos 让人太难以理解,Lamport觉得同行不能理解他的幽默感,于是后来又重新发表了朴实的算法描述版本<a href=\"https://www.notion.so/CAP-Paxos-55dad97e36154e20895e26495fff49ec#891d9af87884442fbf2adaa36b9f9454\" target=\"_blank\" rel=\"noopener\">《Paxos Made Simple》</a>。</p>\n<p><img src=\"Untitled-4a4eaa95-1ce8-4bbd-89c9-700ad82641db.png\" alt></p>\n<p>该共识算法就整体来说,存在两个阶段,如图,第一个阶段是提议,第二个阶段是决定。</p>\n<blockquote>\n<p>分布式系统要做到 fault tolorence,就需要共识模型,而节点达成共识,不仅需要节点之间的算法,还会取决于 client 的行为。比如即使副本系统使用multi-paxos在所有副本服务器上同步了日志序号,但如果Client被允许从非Leader节点写入数据,则整个副本系统仍然不是强一致的。</p>\n</blockquote>\n<p>下面,重头戏来了,详细介绍 Paxos。</p>\n<h3 id=\"角色介绍:\"><a href=\"#角色介绍:\" class=\"headerlink\" title=\"角色介绍:\"></a>角色介绍:</h3><p><strong>Client:</strong>系统外部角色,请求发起者。如民众。</p>\n<p><strong>Proposer:</strong> 接受Client 请求,向集群提出提议(propose)。并在冲突发生时,起到冲突调节的作用。如议员,替民众提出议案。</p>\n<p><strong>Accpetor:</strong> 提议投票和接收者,只有在形成法定人数(Quorum,即 Majority 多数派)时,提议才会最终被接受。如国会。</p>\n<p><strong>Learner:</strong> 提议接受者,backup,备份,对集群的一致性没影响。如记录员。</p>\n<h3 id=\"步骤、阶段:\"><a href=\"#步骤、阶段:\" class=\"headerlink\" title=\"步骤、阶段:\"></a>步骤、阶段:</h3><p><img src=\"Untitled-a6750265-7683-4067-8d61-206f696acc69.png\" alt></p>\n<ol>\n<li><p><strong>Phase1a: Prepare</strong></p>\n<p> proposer 提出一个议案,编号为 N,N一定大于这个 proposer 之前提出的提案编号,请求 acceptor 的 quorum(大多数) 接受。</p>\n</li>\n<li><p><strong>Phase1b: Promise</strong></p>\n<p> 如果 N 大于此 acceptor 之前接受的任何提案编号则接受,否则拒绝。</p>\n</li>\n<li><p><strong>Phase2a: Accept</strong></p>\n<p> 如果达到了多数派,proposer 会发出 accept 请求,此请求包含上一步的提案编号和提案内容。</p>\n</li>\n<li><p><strong>Phase2b: Accepted</strong></p>\n<p> 如果此 acceptor 在此期间没有收到任何大于 N 的提案,则接受此提案内容,否则忽略。</p>\n</li>\n</ol>\n<p>还记得上文中我们提到过,同步编号是非常重要的问题,绿色框出来的实际上就是同步编号的过程。通过这个编号,就知道每条操作日志的先后顺序。简单说来,<strong>第一阶段,获取编号,第二阶段,写入日志。</strong>可以看出来,Paxos 通过两轮交互,牺牲时间和性能来达到弥补一致性的问题。</p>\n<p>现在我们考虑部分节点down 掉的情景。</p>\n<p><img src=\"Untitled-9d3289bb-0f85-43cb-913e-5c3690982bf5.png\" alt></p>\n<p>由于是多数派 accptor 达成了一致,第一阶段仍然成功获得了编号,所有最终还是成功的。</p>\n<p>考虑 proposer down 掉的情景。</p>\n<p><img src=\"Untitled-03b14664-4015-4295-9be4-ed16042a68b7.png\" alt></p>\n<p>没关系,虽然第一个 proposer 失败,但下一个 proposer 用更大的提案编号,所以下一次 proposer最终还是成功了,仍然保证了可用性和一致性。</p>\n<h3 id=\"潜在问题:活锁\"><a href=\"#潜在问题:活锁\" class=\"headerlink\" title=\"潜在问题:活锁\"></a>潜在问题:活锁</h3><p><img src=\"Untitled-12f560d2-d186-4995-8545-bad7909240b7.png\" alt></p>\n<p>Paxos 存在活锁问题。如图,当 第一个proposer 在第一阶段发出请求,还没来得及后续的第二阶段请求,紧接着第二个proposer 在第一阶段也发出请求,如果这样无穷无尽,acceptor 始终停留在决定顺序号的过程上,那大家谁也成功不了,遇到这样的问题,其实很好解决,如果发现顺序号被新的 proposer 更新了,则引入一个随机的等待的超时时间,这样就避免了多个 proposer 发生冲突的问题。</p>\n<h1 id=\"Multi-Paxos\"><a href=\"#Multi-Paxos\" class=\"headerlink\" title=\"Multi Paxos\"></a>Multi Paxos</h1><p>由于Paxos 存在的问题:难实现、效率低(2 轮 rpc)、活锁。</p>\n<p>因此又引入了Multi Paxos,Multi Paxos引入 Leader,也就是<strong>唯一的 proposer</strong>,所有的请求都需经过此 Leader。</p>\n<p><img src=\"Untitled-2a2f06c4-1305-44ec-98ea-94a532d36d56.png\" alt></p>\n<p>因为只有一个节点维护提案编号,这样,就省略了第一轮讨论提议编号的过程。</p>\n<p>然后进一步简化角色。</p>\n<p><img src=\"Untitled-e36f718a-403c-40fc-adfe-423e7d7e6836.png\" alt></p>\n<p>Servers 中第左边的就是 Proposer,另外两个和自身充当 acceptor,这样就更像我们真实的系统了。Raft 和 ZAB协议其实基本上和这个一致,两者的差别很小,就是心跳的方向不一样。</p>\n<h1 id=\"Raft和-ZAB\"><a href=\"#Raft和-ZAB\" class=\"headerlink\" title=\"Raft和 ZAB\"></a>Raft和 ZAB</h1><p>Raft 和 ZAB 协议将 Multi Paxos 划分了三个子问题:</p>\n<ul>\n<li>Leader Election</li>\n<li>Log Replication</li>\n<li>Safety</li>\n</ul>\n<p>在 leader 选举的过程中,也重定义角色:</p>\n<ul>\n<li>Leader</li>\n<li>Follower</li>\n<li>Candidate</li>\n</ul>\n<p><a href=\"http://thesecretlivesofdata.com/raft/\" target=\"_blank\" rel=\"noopener\">这个动画网站</a>生动展示了 leader 选举和日志复制的过程。在这里就不多讲了。</p>\n<p>另外,<a href=\"https://raft.github.io/\" target=\"_blank\" rel=\"noopener\">raft 官方网站</a>可以自己操作模拟选举的过程。</p>\n<h1 id=\"总结\"><a href=\"#总结\" class=\"headerlink\" title=\"总结\"></a>总结</h1><p>今天,我们从 CAP 谈到 Raft 和 ZAB,中间穿插了各种名词,模型无论怎么变化,我们始终只有一个目的,那就是在一个 fault torlerance 的分布式架构下,如何尽量保证其整个系统的可用性和一致性。最理想的模型当然是 Paxos,然而理论到落地还是有差距的,所以诞生了 Raft 和 ZAB,虽然只有一个 leader,但我们允许 leader 挂掉可以重新选举 leader,这样,中心式和分布式达到了一个妥协。<br><br><br><br><br></p>\n<hr>\n<p><em>参考资料:</em></p>\n<p><a href=\"http://blog.kongfy.com/2016/08/%E8%A2%AB%E8%AF%AF%E7%94%A8%E7%9A%84%E4%B8%80%E8%87%B4%E6%80%A7/\" target=\"_blank\" rel=\"noopener\"><em>http://blog.kongfy.com/2016/08/被误用的一致性/</em></a></p>\n<p><a href=\"http://blog.kongfy.com/2016/05/%e5%88%86%e5%b8%83%e5%bc%8f%e5%85%b1%e8%af%86consensus%ef%bc%9aviewstamped%e3%80%81raft%e5%8f%8apaxos/\" target=\"_blank\" rel=\"noopener\"><em>http://blog.kongfy.com/2016/05/分布式共识consensus:viewstamped、raft及paxos/</em></a></p>\n<p><a href=\"https://lotabout.me/2019/Raft-Consensus-Algorithm/\" target=\"_blank\" rel=\"noopener\"><em>https://lotabout.me/2019/Raft-Consensus-Algorithm/</em></a></p>\n<p><a href=\"https://raft.github.io/\" target=\"_blank\" rel=\"noopener\"><em>https://raft.github.io/</em></a></p>\n<p><a href=\"http://thesecretlivesofdata.com/raft/\" target=\"_blank\" rel=\"noopener\"><em>http://thesecretlivesofdata.com/raft/</em></a></p>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"浅谈-CAP-和-Paxos-共识算法\"><a href=\"#浅谈-CAP-和-Paxos-共识算法\" class=\"headerlink\" title=\"浅谈 CAP 和 Paxos 共识算法\"></a>浅谈 CAP 和 Paxos 共识算法</h1><p>分布式共识是整个分布式系统中最为重要的问题,没有之一,本人想按照自己的理解用大白话讲一讲,既然是大白话,就非常不严谨,也很粗浅,有说的不对的地方,欢迎大佬拍砖,头盔已戴好。</p>\n<p>分布式、CAP、一致性、状态机、共识、Paxos、Raft、ZAB,想必这些名词大家已经烂熟于耳了,在感叹这些高逼格名词的同时,你是不是总感觉这些名词有点混淆不清、模棱两可的赶脚?如果有,请听我慢慢道来。(没有?好吧,您是大佬,请果断 command+w。)</p>\n<hr>\n<h1 id=\"什么是-CAP\"><a href=\"#什么是-CAP\" class=\"headerlink\" title=\"什么是 CAP\"></a>什么是 CAP</h1><p><img src=\"Distributed_system_CAP-iteblog-ac864baa-9770-40b5-aaf0-432e011fafc6.png\" alt></p>\n<p>CAP 理论的背景介绍已经烂大街了,这里不过多介绍。我们谈谈如何理解它的问题,关于这方面,我觉得解释最清楚的是油管上某个小哥的视频:</p>\n<p><a href=\"https://www.youtube.com/watch?v=Jw1iFr4v58M\" target=\"_blank\" rel=\"noopener\">https://www.youtube.com/watch?v=Jw1iFr4v58M</a></p>\n<h2 id=\"用人话解释三个名词:\"><a href=\"#用人话解释三个名词:\" class=\"headerlink\" title=\"用人话解释三个名词:\"></a>用人话解释三个名词:</h2><h3 id=\"一致性\"><a href=\"#一致性\" class=\"headerlink\" title=\"一致性\"></a><strong>一致性</strong></h3><p>如果刚刚向一个节点写入,那么之后,从另外一个节点读取的必须是刚刚写入的数据,不能是更老的数据。</p>\n<h3 id=\"可用性\"><a href=\"#可用性\" class=\"headerlink\" title=\"可用性\"></a><strong>可用性</strong></h3><p>如果请求一个节点,这个节点必须能够给予回复,如果节点挂掉了,那就谈不上可用性了。</p>\n<h3 id=\"分区容忍性\"><a href=\"#分区容忍性\" class=\"headerlink\" title=\"分区容忍性\"></a><strong>分区容忍性</strong></h3><p>是否容忍网络分区,即可以允许节点和其它节点无法通信。</p>\n<p>CAP 的意思就是说我们最多只能保证其中两个条件同时成立。</p>\n<p>下面我们来看看为什么。</p>\n<p><img src=\"Untitled-75e05e42-d661-4446-9120-ae13749b1535.png\" alt></p>\n<p>如图所示,假如我们满足了分区容忍性,即虚线处表示两个节点发生了分区。</p>\n<ol>\n<li><strong>假如要满足一致性</strong>,那么,我们只能让请求另一个节点的操作暂时 hang 住,返回 client 失败或者超时的结果,这种情况多发生在银行柜台等对数据一致性要求很高的情境下,因为比起保证用户资金数目的正确性比暂时让用户无法操作要更重要一些。</li>\n<li><strong>假如要满足可用性</strong>,因为网络已经隔离,也就没办法达到一致性,这种情况多发生在互联网行业中,比如新闻等对数据一致性要求不高但对可用性要求高的情况下,毕竟,用户压根看不了新闻比看不到及时新闻要重要的多。</li>\n</ol>\n<p>大家可以自己自由组合,最终会证明,三种条件不可能同时满足,其实大部分情况下,我们都是在一致性和可用性之间取舍而已。</p>\n<p><img src=\"Untitled-de737321-ffd8-4e8d-b3f7-3d5483db237e.png\" alt></p>\n<h1 id=\"Consistency-Consensus\"><a href=\"#Consistency-Consensus\" class=\"headerlink\" title=\"Consistency = Consensus?\"></a>Consistency = Consensus?</h1><p>Consistency几乎被业界用烂了,以至于当我们在讨论一致性的时候,其实我们都无法确定对方所说的一致性是不是和自己的那个一致。😅</p>\n<p><strong>Consistency:一致性,Consensus:协同,</strong>这两个概念极容易混淆。</p>\n<p>我们常说的一致性(Consistency)在分布式系统中指的是对于同一个数据的多个副本,其对外表现的数据一致性,如线性一致性、因果一致性、最终一致性等,都是用来描述副本问题中的一致性的。而共识(Consensus)则不同,简单来说,共识问题是要经过某种算法使多个节点达成相同状态的一个过程。在我看来,一致性强调结果,共识强调过程。</p>\n<p><img src=\"Distributed_system_Consistency_model-iteblog-392cde62-0df4-41ab-a200-8699a871dd03.jpg\" alt></p>\n<h1 id=\"共识?状态机?什么鬼?\"><a href=\"#共识?状态机?什么鬼?\" class=\"headerlink\" title=\"共识?状态机?什么鬼?\"></a>共识?状态机?什么鬼?</h1><p><img src=\"Untitled-a17735d5-49dd-4565-8bbf-271c080e18a5.png\" alt></p>\n<p>Ken Thompson</p>\n<p>共识有个更高逼格的称呼:</p>\n<h3 id=\"基于状态机复制的共识算法\"><a href=\"#基于状态机复制的共识算法\" class=\"headerlink\" title=\"基于状态机复制的共识算法\"></a>基于状态机复制的共识算法</h3><p>大牛们最擅长做的事就是把各种简单的问题用个高逼格的专业术语把你拒之门外,就好比 CCAV 里的各种指数其实说白了就是告诉你央行大妈又要放水了。</p>\n<p>那么,状态机是什么?</p>\n<p>状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。</p>\n<p>说人话,好不?好,看下图,门,有两种状态,开着的和关着的。因此,在我看来状态是一种静态的场景,而转换赋予了其动态的变化。</p>\n<p><img src=\"Untitled-b4f0cf74-00d2-4eba-968f-619a4ed257da.png\" alt></p>\n<p>以此类比一下,如果一个节点当前的数据是 X,现在有了 add+1 的操作日志来了,那么现在的状态就是 X+1,好了,状态(X)有了,变化(操作日志)有了,这就是状态机。</p>\n<p>分布式共识,简单来说,就是在一个或多个节点提议了一个状态应当是什么后,系统中所有节点对这个状态达成一致意见的整个过程。</p>\n<p>共识是过程,一致是结果,明白了吗?</p>\n<h1 id=\"共识模型\"><a href=\"#共识模型\" class=\"headerlink\" title=\"共识模型\"></a>共识模型</h1><h2 id=\"主从同步:\"><a href=\"#主从同步:\" class=\"headerlink\" title=\"主从同步:\"></a>主从同步:</h2><p><img src=\"Untitled-9ad779df-cde7-402f-8ca0-31cf1807e0e7.png\" alt></p>\n<p>我们都知道MySQL等业界常见数据库的主从同步(Master-Slave Replication),主从同步分三个阶段:</p>\n<ul>\n<li>Master 接受写请求</li>\n<li>Master 复制日志至 Slave</li>\n<li>Master 等待,直到<strong>所有从库</strong>返回。</li>\n</ul>\n<p>可见,主从同步模型存在致命问题:只要一个节点失败,则 Master 就会阻塞,导致整个集群不可用,保证了一致性,可用性缺大大降低了。</p>\n<h2 id=\"多数派:\"><a href=\"#多数派:\" class=\"headerlink\" title=\"多数派:\"></a>多数派:</h2><p>每次写入大于 N/2个节点,每次读也保证从 N/2个节点中读。多数派的模型看似完美解决了多节点的一致性问题,不就是性能差点嘛,可是在并发的情况下就不一定了,如下图:</p>\n<p><img src=\"Untitled-43522eca-aed6-4148-bc7c-499ba25e2284.png\" alt></p>\n<p>在并发环境下,因为每个节点的操作日志写入顺序无法保证一致,也就无法保证最终的一致性。如图,都是向三个节点 inc5、set0 两个操作,但因为顺序不一样,最终状态两个是 0,一个是 5。因此我们需要引入一种机制,给每个操作日志编上号,这个号从小到大生成,这样,每个节点就不会弄错。(是否想到了网络中的分包与重组?)那么,现在关键问题又来了,怎么协同这个编号?貌似这是鸡生蛋、蛋生鸡的问题。😂</p>\n<h1 id=\"Paxos\"><a href=\"#Paxos\" class=\"headerlink\" title=\"Paxos\"></a>Paxos</h1><p>Paxos 模型试图探讨分布式共识问题的一个更一般的形式。</p>\n<p>Lesile Lamport,Latex的发明者,提出了 Paxos算法。他虚拟了一个叫做 Paxos 的希腊城邦,这个岛按照议会民主制的政治模式制定法律,但是没有人愿意将自己的全部时间和精力放在这件事上。所以无论是议员、议长或者传递纸条的服务员都不能承诺别人需要时一定会出现,也无法承诺批准决议后者传递消息的时间。由于Paxos 让人太难以理解,Lamport觉得同行不能理解他的幽默感,于是后来又重新发表了朴实的算法描述版本<a href=\"https://www.notion.so/CAP-Paxos-55dad97e36154e20895e26495fff49ec#891d9af87884442fbf2adaa36b9f9454\" target=\"_blank\" rel=\"noopener\">《Paxos Made Simple》</a>。</p>\n<p><img src=\"Untitled-4a4eaa95-1ce8-4bbd-89c9-700ad82641db.png\" alt></p>\n<p>该共识算法就整体来说,存在两个阶段,如图,第一个阶段是提议,第二个阶段是决定。</p>\n<blockquote>\n<p>分布式系统要做到 fault tolorence,就需要共识模型,而节点达成共识,不仅需要节点之间的算法,还会取决于 client 的行为。比如即使副本系统使用multi-paxos在所有副本服务器上同步了日志序号,但如果Client被允许从非Leader节点写入数据,则整个副本系统仍然不是强一致的。</p>\n</blockquote>\n<p>下面,重头戏来了,详细介绍 Paxos。</p>\n<h3 id=\"角色介绍:\"><a href=\"#角色介绍:\" class=\"headerlink\" title=\"角色介绍:\"></a>角色介绍:</h3><p><strong>Client:</strong>系统外部角色,请求发起者。如民众。</p>\n<p><strong>Proposer:</strong> 接受Client 请求,向集群提出提议(propose)。并在冲突发生时,起到冲突调节的作用。如议员,替民众提出议案。</p>\n<p><strong>Accpetor:</strong> 提议投票和接收者,只有在形成法定人数(Quorum,即 Majority 多数派)时,提议才会最终被接受。如国会。</p>\n<p><strong>Learner:</strong> 提议接受者,backup,备份,对集群的一致性没影响。如记录员。</p>\n<h3 id=\"步骤、阶段:\"><a href=\"#步骤、阶段:\" class=\"headerlink\" title=\"步骤、阶段:\"></a>步骤、阶段:</h3><p><img src=\"Untitled-a6750265-7683-4067-8d61-206f696acc69.png\" alt></p>\n<ol>\n<li><p><strong>Phase1a: Prepare</strong></p>\n<p> proposer 提出一个议案,编号为 N,N一定大于这个 proposer 之前提出的提案编号,请求 acceptor 的 quorum(大多数) 接受。</p>\n</li>\n<li><p><strong>Phase1b: Promise</strong></p>\n<p> 如果 N 大于此 acceptor 之前接受的任何提案编号则接受,否则拒绝。</p>\n</li>\n<li><p><strong>Phase2a: Accept</strong></p>\n<p> 如果达到了多数派,proposer 会发出 accept 请求,此请求包含上一步的提案编号和提案内容。</p>\n</li>\n<li><p><strong>Phase2b: Accepted</strong></p>\n<p> 如果此 acceptor 在此期间没有收到任何大于 N 的提案,则接受此提案内容,否则忽略。</p>\n</li>\n</ol>\n<p>还记得上文中我们提到过,同步编号是非常重要的问题,绿色框出来的实际上就是同步编号的过程。通过这个编号,就知道每条操作日志的先后顺序。简单说来,<strong>第一阶段,获取编号,第二阶段,写入日志。</strong>可以看出来,Paxos 通过两轮交互,牺牲时间和性能来达到弥补一致性的问题。</p>\n<p>现在我们考虑部分节点down 掉的情景。</p>\n<p><img src=\"Untitled-9d3289bb-0f85-43cb-913e-5c3690982bf5.png\" alt></p>\n<p>由于是多数派 accptor 达成了一致,第一阶段仍然成功获得了编号,所有最终还是成功的。</p>\n<p>考虑 proposer down 掉的情景。</p>\n<p><img src=\"Untitled-03b14664-4015-4295-9be4-ed16042a68b7.png\" alt></p>\n<p>没关系,虽然第一个 proposer 失败,但下一个 proposer 用更大的提案编号,所以下一次 proposer最终还是成功了,仍然保证了可用性和一致性。</p>\n<h3 id=\"潜在问题:活锁\"><a href=\"#潜在问题:活锁\" class=\"headerlink\" title=\"潜在问题:活锁\"></a>潜在问题:活锁</h3><p><img src=\"Untitled-12f560d2-d186-4995-8545-bad7909240b7.png\" alt></p>\n<p>Paxos 存在活锁问题。如图,当 第一个proposer 在第一阶段发出请求,还没来得及后续的第二阶段请求,紧接着第二个proposer 在第一阶段也发出请求,如果这样无穷无尽,acceptor 始终停留在决定顺序号的过程上,那大家谁也成功不了,遇到这样的问题,其实很好解决,如果发现顺序号被新的 proposer 更新了,则引入一个随机的等待的超时时间,这样就避免了多个 proposer 发生冲突的问题。</p>\n<h1 id=\"Multi-Paxos\"><a href=\"#Multi-Paxos\" class=\"headerlink\" title=\"Multi Paxos\"></a>Multi Paxos</h1><p>由于Paxos 存在的问题:难实现、效率低(2 轮 rpc)、活锁。</p>\n<p>因此又引入了Multi Paxos,Multi Paxos引入 Leader,也就是<strong>唯一的 proposer</strong>,所有的请求都需经过此 Leader。</p>\n<p><img src=\"Untitled-2a2f06c4-1305-44ec-98ea-94a532d36d56.png\" alt></p>\n<p>因为只有一个节点维护提案编号,这样,就省略了第一轮讨论提议编号的过程。</p>\n<p>然后进一步简化角色。</p>\n<p><img src=\"Untitled-e36f718a-403c-40fc-adfe-423e7d7e6836.png\" alt></p>\n<p>Servers 中第左边的就是 Proposer,另外两个和自身充当 acceptor,这样就更像我们真实的系统了。Raft 和 ZAB协议其实基本上和这个一致,两者的差别很小,就是心跳的方向不一样。</p>\n<h1 id=\"Raft和-ZAB\"><a href=\"#Raft和-ZAB\" class=\"headerlink\" title=\"Raft和 ZAB\"></a>Raft和 ZAB</h1><p>Raft 和 ZAB 协议将 Multi Paxos 划分了三个子问题:</p>\n<ul>\n<li>Leader Election</li>\n<li>Log Replication</li>\n<li>Safety</li>\n</ul>\n<p>在 leader 选举的过程中,也重定义角色:</p>\n<ul>\n<li>Leader</li>\n<li>Follower</li>\n<li>Candidate</li>\n</ul>\n<p><a href=\"http://thesecretlivesofdata.com/raft/\" target=\"_blank\" rel=\"noopener\">这个动画网站</a>生动展示了 leader 选举和日志复制的过程。在这里就不多讲了。</p>\n<p>另外,<a href=\"https://raft.github.io/\" target=\"_blank\" rel=\"noopener\">raft 官方网站</a>可以自己操作模拟选举的过程。</p>\n<h1 id=\"总结\"><a href=\"#总结\" class=\"headerlink\" title=\"总结\"></a>总结</h1><p>今天,我们从 CAP 谈到 Raft 和 ZAB,中间穿插了各种名词,模型无论怎么变化,我们始终只有一个目的,那就是在一个 fault torlerance 的分布式架构下,如何尽量保证其整个系统的可用性和一致性。最理想的模型当然是 Paxos,然而理论到落地还是有差距的,所以诞生了 Raft 和 ZAB,虽然只有一个 leader,但我们允许 leader 挂掉可以重新选举 leader,这样,中心式和分布式达到了一个妥协。<br><br><br><br><br></p>\n<hr>\n<p><em>参考资料:</em></p>\n<p><a href=\"http://blog.kongfy.com/2016/08/%E8%A2%AB%E8%AF%AF%E7%94%A8%E7%9A%84%E4%B8%80%E8%87%B4%E6%80%A7/\" target=\"_blank\" rel=\"noopener\"><em>http://blog.kongfy.com/2016/08/被误用的一致性/</em></a></p>\n<p><a href=\"http://blog.kongfy.com/2016/05/%e5%88%86%e5%b8%83%e5%bc%8f%e5%85%b1%e8%af%86consensus%ef%bc%9aviewstamped%e3%80%81raft%e5%8f%8apaxos/\" target=\"_blank\" rel=\"noopener\"><em>http://blog.kongfy.com/2016/05/分布式共识consensus:viewstamped、raft及paxos/</em></a></p>\n<p><a href=\"https://lotabout.me/2019/Raft-Consensus-Algorithm/\" target=\"_blank\" rel=\"noopener\"><em>https://lotabout.me/2019/Raft-Consensus-Algorithm/</em></a></p>\n<p><a href=\"https://raft.github.io/\" target=\"_blank\" rel=\"noopener\"><em>https://raft.github.io/</em></a></p>\n<p><a href=\"http://thesecretlivesofdata.com/raft/\" target=\"_blank\" rel=\"noopener\"><em>http://thesecretlivesofdata.com/raft/</em></a></p>\n"}],"PostAsset":[{"_id":"source/_posts/consensus/Untitled-43522eca-aed6-4148-bc7c-499ba25e2284.png","slug":"Untitled-43522eca-aed6-4148-bc7c-499ba25e2284.png","post":"clcvfoh2t000750pqm0d3rm98","modified":0,"renderable":0},{"_id":"source/_posts/consensus/Untitled-b4f0cf74-00d2-4eba-968f-619a4ed257da.png","slug":"Untitled-b4f0cf74-00d2-4eba-968f-619a4ed257da.png","post":"clcvfoh2t000750pqm0d3rm98","modified":0,"renderable":0},{"_id":"source/_posts/暮秋入冬琐语/3.jpg","slug":"3.jpg","post":"clcvfoh2q000450pqpuclutae","modified":0,"renderable":0},{"_id":"source/_posts/consensus/Untitled-75e05e42-d661-4446-9120-ae13749b1535.png","slug":"Untitled-75e05e42-d661-4446-9120-ae13749b1535.png","post":"clcvfoh2t000750pqm0d3rm98","modified":0,"renderable":0},{"_id":"source/_posts/consensus/Untitled-a6750265-7683-4067-8d61-206f696acc69.png","slug":"Untitled-a6750265-7683-4067-8d61-206f696acc69.png","post":"clcvfoh2t000750pqm0d3rm98","modified":0,"renderable":0},{"_id":"source/_posts/songcisishou/1.jpg","slug":"1.jpg","post":"clcvfoh2j000250pq4ov0y6tn","modified":0,"renderable":0},{"_id":"source/_posts/暮秋入冬琐语/1.jpg","slug":"1.jpg","post":"clcvfoh2q000450pqpuclutae","modified":0,"renderable":0},{"_id":"source/_posts/暮秋入冬琐语/2.jpg","slug":"2.jpg","post":"clcvfoh2q000450pqpuclutae","modified":0,"renderable":0},{"_id":"source/_posts/consensus/Distributed_system_CAP-iteblog-ac864baa-9770-40b5-aaf0-432e011fafc6.png","slug":"Distributed_system_CAP-iteblog-ac864baa-9770-40b5-aaf0-432e011fafc6.png","post":"clcvfoh2t000750pqm0d3rm98","modified":0,"renderable":0},{"_id":"source/_posts/consensus/Distributed_system_Consistency_model-iteblog-392cde62-0df4-41ab-a200-8699a871dd03.jpg","slug":"Distributed_system_Consistency_model-iteblog-392cde62-0df4-41ab-a200-8699a871dd03.jpg","post":"clcvfoh2t000750pqm0d3rm98","modified":0,"renderable":0},{"_id":"source/_posts/consensus/Untitled-03b14664-4015-4295-9be4-ed16042a68b7.png","slug":"Untitled-03b14664-4015-4295-9be4-ed16042a68b7.png","post":"clcvfoh2t000750pqm0d3rm98","modified":0,"renderable":0},{"_id":"source/_posts/consensus/Untitled-12f560d2-d186-4995-8545-bad7909240b7.png","slug":"Untitled-12f560d2-d186-4995-8545-bad7909240b7.png","post":"clcvfoh2t000750pqm0d3rm98","modified":0,"renderable":0},{"_id":"source/_posts/consensus/Untitled-2a2f06c4-1305-44ec-98ea-94a532d36d56.png","slug":"Untitled-2a2f06c4-1305-44ec-98ea-94a532d36d56.png","post":"clcvfoh2t000750pqm0d3rm98","modified":0,"renderable":0},{"_id":"source/_posts/consensus/Untitled-4a4eaa95-1ce8-4bbd-89c9-700ad82641db.png","slug":"Untitled-4a4eaa95-1ce8-4bbd-89c9-700ad82641db.png","post":"clcvfoh2t000750pqm0d3rm98","modified":0,"renderable":0},{"_id":"source/_posts/consensus/Untitled-9ad779df-cde7-402f-8ca0-31cf1807e0e7.png","slug":"Untitled-9ad779df-cde7-402f-8ca0-31cf1807e0e7.png","post":"clcvfoh2t000750pqm0d3rm98","modified":0,"renderable":0},{"_id":"source/_posts/consensus/Untitled-9d3289bb-0f85-43cb-913e-5c3690982bf5.png","slug":"Untitled-9d3289bb-0f85-43cb-913e-5c3690982bf5.png","post":"clcvfoh2t000750pqm0d3rm98","modified":0,"renderable":0},{"_id":"source/_posts/consensus/Untitled-a17735d5-49dd-4565-8bbf-271c080e18a5.png","slug":"Untitled-a17735d5-49dd-4565-8bbf-271c080e18a5.png","post":"clcvfoh2t000750pqm0d3rm98","modified":0,"renderable":0},{"_id":"source/_posts/consensus/Untitled-de737321-ffd8-4e8d-b3f7-3d5483db237e.png","slug":"Untitled-de737321-ffd8-4e8d-b3f7-3d5483db237e.png","post":"clcvfoh2t000750pqm0d3rm98","modified":0,"renderable":0},{"_id":"source/_posts/consensus/Untitled-e36f718a-403c-40fc-adfe-423e7d7e6836.png","slug":"Untitled-e36f718a-403c-40fc-adfe-423e7d7e6836.png","post":"clcvfoh2t000750pqm0d3rm98","modified":0,"renderable":0}],"PostCategory":[{"post_id":"clcvfoh2j000250pq4ov0y6tn","category_id":"clcvfoh2r000550pqv9cjejh6","_id":"clcvfoh32000b50pqlu4cpsd1"},{"post_id":"clcvfoh2q000450pqpuclutae","category_id":"clcvfoh2y000850pqj0kbtedo","_id":"clcvfoh32000f50pqpa446tur"},{"post_id":"clcvfoh2t000750pqm0d3rm98","category_id":"clcvfoh32000c50pqbvtm0mf3","_id":"clcvfoh33000h50pq71tf5gky"}],"PostTag":[{"post_id":"clcvfoh2j000250pq4ov0y6tn","tag_id":"clcvfoh2t000650pqk2juoipv","_id":"clcvfoh2z000a50pqftv27u79"},{"post_id":"clcvfoh2q000450pqpuclutae","tag_id":"clcvfoh2y000950pqkctbaquc","_id":"clcvfoh32000e50pqrtgnvk7e"},{"post_id":"clcvfoh2t000750pqm0d3rm98","tag_id":"clcvfoh32000d50pqb82qe49l","_id":"clcvfoh34000m50pqgx1ieyql"},{"post_id":"clcvfoh2t000750pqm0d3rm98","tag_id":"clcvfoh32000g50pqpsx11csb","_id":"clcvfoh34000n50pqq13ouboi"},{"post_id":"clcvfoh2t000750pqm0d3rm98","tag_id":"clcvfoh33000i50pqwdyxr9zv","_id":"clcvfoh34000o50pq7jojln00"},{"post_id":"clcvfoh2t000750pqm0d3rm98","tag_id":"clcvfoh33000j50pqwbnl7k9s","_id":"clcvfoh34000p50pqc5me3jko"},{"post_id":"clcvfoh2t000750pqm0d3rm98","tag_id":"clcvfoh33000k50pqp00hdrdn","_id":"clcvfoh34000q50pqsv4zubde"},{"post_id":"clcvfoh2t000750pqm0d3rm98","tag_id":"clcvfoh33000l50pqe0ep4r13","_id":"clcvfoh34000r50pq5qh2rbzq"}],"Tag":[{"name":"诗歌","_id":"clcvfoh2t000650pqk2juoipv"},{"name":"散文","_id":"clcvfoh2y000950pqkctbaquc"},{"name":"分布式","_id":"clcvfoh32000d50pqb82qe49l"},{"name":"CAP","_id":"clcvfoh32000g50pqpsx11csb"},{"name":"共识","_id":"clcvfoh33000i50pqwdyxr9zv"},{"name":"Paxos","_id":"clcvfoh33000j50pqwbnl7k9s"},{"name":"Raft","_id":"clcvfoh33000k50pqp00hdrdn"},{"name":"ZAB","_id":"clcvfoh33000l50pqe0ep4r13"}]}}