Help
RSS
API
Feed
Maltego
Contact
Domain > zuoqy.com
×
Welcome!
Right click nodes and scroll the mouse to navigate the graph.
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
Whois
Property
Value
Email
contact@privacyprotect.org
NameServer
DNS2.BLUEHOST.COM
Created
2015-03-01 00:00:00
Changed
2016-01-22 00:00:00
Expires
2017-03-01 00:00:00
Registrar
PDR LTD. D/B/A PUBLI
DNS Resolutions
Date
IP Address
2024-08-09
185.199.109.153
(
ClassC
)
Port 80
HTTP/1.1 200 OKConnection: keep-aliveContent-Length: 27959Server: GitHub.comContent-Type: text/html; charsetutf-8Last-Modified: Tue, 27 Nov 2018 14:09:43 GMTAccess-Control-Allow-Origin: *ETag: 5bfd5027-6d37expires: Fri, 09 Aug 2024 02:57:46 GMTCache-Control: max-age600x-proxy-cache: MISSX-GitHub-Request-Id: 5B82:3A3935:5C1B60:5F0C50:66B58351Accept-Ranges: bytesAge: 0Date: Fri, 09 Aug 2024 02:47:46 GMTVia: 1.1 varnishX-Served-By: cache-bfi-krnt7300108-BFIX-Cache: MISSX-Cache-Hits: 0X-Timer: S1723171666.207921,VS0,VE76Vary: Accept-EncodingX-Fastly-Request-ID: 6fa3e5739508776d3ae380a20ecdba76d6b39079 !doctype html>html classtheme-next use-motion theme-next-mist>head> meta charsetUTF-8/>meta http-equivX-UA-Compatible contentIEedge/>meta nameviewport contentwidthdevice-width, initial-scale1, maximum-scale1/> meta namegoogle-site-verification contentGgXgmwmTNbQickN-preU_L3kzGIRPxHZeE43Gxd_Fo8 /> link relstylesheet typetext/css hrefhttp://zuoqy.com/vendors/fancybox/source/jquery.fancybox.css?v2.1.5/>link relstylesheet typetext/css hrefhttp://zuoqy.com/css/main.css?v0.4.2/> meta namedescription contentWrite something about Java Web development distributed computing technologies. /> meta namekeywords contentJava,Algorithm,Machine Learning /> link relalternate href/atom.xml titleQ.Y Zuo Believes typeapplication/atom+xml /> link relshorticon icon typeimage/x-icon hrefhttp://zuoqy.com/favicon.ico /> title> Q.Y Zuo Believes /title>/head>body> div classcontainer one-column page-home > div classheadband>/div> div idheader classheader> div classheader-inner> h1 classsite-meta> span classlogo-line-before>i>/i>/span> a href/ classbrand> span classlogo> i classicon-logo>/i> /span> span classsite-title>Q.Y Zuo Believes/span> /a> span classlogo-line-after>i>/i>/span>/h1> ul idmenu classmenu> li classmenu-item menu-item-home> a href/> i classmenu-item-icon icon-home>/i> br /> Home /a> /li> li classmenu-item menu-item-categories> a href/categories> i classmenu-item-icon icon-categories>/i> br /> Categories /a> /li> li classmenu-item menu-item-archives> a href/archives> i classmenu-item-icon icon-archives>/i> br /> Archives /a> /li> li classmenu-item menu-item-tags> a href/tags> i classmenu-item-icon icon-tags>/i> br /> Tags /a> /li> /ul> /div> /div> div idmain classmain> div classmain-inner> div idcontent classcontent> div idposts classposts-expand> div classpost post-type-normal > div classpost-header> h1 classpost-title> a classpost-title-link href/2018/11/26/Golang-Memory-Model/> Go语言内存模型 /a> /h1> div classpost-meta> span classpost-time> Posted on 2018-11-26 /span> span classpost-category> | In a href/categories/golang/>golang/a> /span> /div> /div> div classpost-body> h2 idIntroduction>Introduction/h2>p>Go内存模型指定了一系列条件,在该条件下,可以保证在一个goroutine中对某个变量的读取操作可以观察(observe)到其他goroutine对这个变量写入的值。(内存可见性)/p>h2 idHappens-before>Happens-before/h2>p>指令重排序对goroutine内部的读写顺序可能有影响,但不会影响代码定义的当前goroutine整体的行为。br>例如在goroutine1中有代码code>a 1; b 2;/code>,在其他goroutine中可能观察到b先于a赋值,但对于goroutine1,其行为不会因为指令重排序发生变化。/p>p>Go语言中的Happens-Before:Happens-Before定义了内存操作的顺序。如果e1 happens-before e2, 则 e2 一定在e2发生之后才发生。如果e1 e2 没有happens-before的关系限制,则e1 e2是并发发生的。在单个goroutine内部, happens-before 次序就是程序定义的顺序。/p>p>读取操作r对变量v 可以观察到写入操作w对变量v的写入,必须同时满足如下两个条件:/p>ol>li>r不能先于w发生/li>li>没有其他的对变量v的写入操作w‘ 晚于 w 但 先于r发生/li>/ol>p>读取操作保证能观察到写入操作w对变量v的写入,必须同时满足如下两个条件:/p>ol>li>w 先于 r发生/li>li>任何其他对变量v的写入操作,要么先于w发生,要么晚于r发生。/li>/ol> div classpost-more-link text-center> a classbtn href/2018/11/26/Golang-Memory-Model/#more> Read more » /a> /div> /div> div classpost-footer> div classpost-tags> a href/tags/golang/> #golang /a> a href/tags/memory-model/> #memory model /a> /div> div classpost-eof>/div> /div> /div> div classpost post-type-normal > div classpost-header> h1 classpost-title> a classpost-title-link href/2018/11/06/Kubernates3-why-pod/> Kubernetes3 为什么需要Pod /a> /h1> div classpost-meta> span classpost-time> Posted on 2018-11-06 /span> span classpost-category> | In a href/categories/Cloud-Compute/>Cloud Compute/a> /span> /div> /div> div classpost-body> h2 id为什么需要Pod>为什么需要Pod/h2>ol>li>在工业实际部署中,经常需要多个进程部署在同一个节点上。类似于Linux操作系统中的进程组的概念(code>pstree -g/code> 命令查看进程组),他们之间有着”超亲密关系”,例如相互之间会发生直接的文件交换、使用localhost或者Socket文件进行本地通信、共享某些Linux Namespace等。/li>li>容器的”单进程模型”,PID1的进程往往是应用本身,无法像正常操作系统中的init进程那样拥有进程管理的功能。/li>li>存在”超亲密关系”的进程,需要按照严格的拓扑顺序启动。也就是需要对容器成组进行调度(gang scheduling)。br>基于上述原因,Kubernetes提供了Pod这个逻辑概念,将需要在同一节点上,可能共享Namespace以及其他本地资源的容器进行成组调度。/li>/ol>h2 idPod的实现机制>Pod的实现机制/h2>p>Pod是逻辑概念,其实是一组共享了某些资源(Network Namespace)的容器组。在没有成组调度时,如要实现容器A和容器B共享网络和Volume,可以通过如下命令实现:br> div classpost-more-link text-center> a classbtn href/2018/11/06/Kubernates3-why-pod/#more> Read more » /a> /div> /div> div classpost-footer> div classpost-tags> a href/tags/kubernetes/> #kubernetes /a> /div> div classpost-eof>/div> /div> /div> div classpost post-type-normal > div classpost-header> h1 classpost-title> a classpost-title-link href/2018/10/29/Kubernates2-essential-concept/> Kubernetes2 基本概念 /a> /h1> div classpost-meta> span classpost-time> Posted on 2018-10-29 /span> span classpost-category> | In a href/categories/Cloud-Compute/>Cloud Compute/a> /span> /div> /div> div classpost-body> h2 id要解决什么问题>要解决什么问题/h2>p>可以方便的将用户应用的镜像部署到集群,并提供路由网关、水平扩展、监控、备份灾难恢复等一系列运维能力。这些问题,其实一个PAAS平台都可以解决。/p>p>除了解决以上问题,Kubernetes项目区别于其他PAAS平台,重点要解决的问题,来自于Borg项目的研究人员在论文中的一个重要观点:/p>blockquote>p>运行在大规模集群中的各个任务之间,存在着各种各样的关系。这些关系的处理,才是作业编排和管理系统最困难的地方。/p>/blockquote>h2 id需要什么样的架构>需要什么样的架构/h2>ul>li>节点分为控制节点Master和计算节点Node/li>li>Master节点包含kube-controller, kube-api-server 和 kube-scheduler三个组件/li>li>Node节点中的核心组件kubelet:ul>li>通过CNI(Container Networking Interface)与网络插件交互,配置容器网络;/li>li>通过CSI(Container Storage Interface)与存储插件交互,配置持久化存储;/li>li>通过CRI(Container Runtime Interface)与容器运行时交互,定义容器运行时的各项操作。/li>li>容器运行时通过OCI容器运行时规范,与Linux操作系统交互。 div classpost-more-link text-center> a classbtn href/2018/10/29/Kubernates2-essential-concept/#more> Read more » /a> /div> /div> div classpost-footer> div classpost-tags> a href/tags/kubernetes/> #kubernetes /a> /div> div classpost-eof>/div> /div> /div> div classpost post-type-normal > div classpost-header> h1 classpost-title> a classpost-title-link href/2018/10/17/communicate-effectively/> 如何有效地沟通 /a> /h1> div classpost-meta> span classpost-time> Posted on 2018-10-17 /span> span classpost-category> | In a href/categories/Reading/>Reading/a> /span> /div> /div> div classpost-body> p>在吴军老师新书《态度》写给其女儿一封信中,提到了如何有效地沟通:/p>p>strong>第一,有效的沟通要以对方确认为准,不要以为话说出去,别人就一定能接收了你传递的信息。/strong>br>(那么反过来,自己要做到对别人来讲”靠谱”,就是”凡事有交代,件件有着落,事事有回应。”)/p>p>strong>第二,要以对方听得懂的话来沟通,不要把简单的问题讲复杂了。/strong> 这里作者举了一个很好的例子:/p>blockquote>p>中国的顾维钧先生是一个优秀的外交家,他在1919年的巴黎和会上向西方国家的代表讲述山东省对中国的重要性时,是这样说的:br>孔子对中国人来说,相当于耶稣对西方人一样重要。西方人一直把耶路撒冷作为圣地,并且上千年一直要夺回那个地方。br>山东是孔子的出生地,它在中国人心中的地位,相当于耶路撒冷在西方人心中的地位。/p>/blockquote>p>简单的几句话,就把意思说明白了。对方能听懂,不是因为对山东和孔子有多么熟悉,而是因为熟知耶路撒冷和耶稣。/p>p>strong>第三,沟通要简洁,切中要害。对不同的人,表达方式也不一样。/strong>/p>p>strong>第四,善辩不等于好的沟通,沟通的目的是让对方接受自己的想法,而非把对方驳得哑口无言。/strong>/p> /div> div classpost-footer> div classpost-tags> a href/tags/Reading/> #Reading /a> a href/tags/态度/> #态度 /a> a href/tags/沟通/> #沟通 /a> /div> div classpost-eof>/div> /div> /div> div classpost post-type-normal > div classpost-header> h1 classpost-title> a classpost-title-link href/2018/10/07/Pattern-Service-Mesh/> Pattern Service Mesh /a> /h1> div classpost-meta> span classpost-time> Posted on 2018-10-07 /span> span classpost-category> | In a href/categories/Distributing-System-Service-Mesh/>Distributing System, Service Mesh/a> /span> /div> /div> div classpost-body> h2 id当网络刚刚出现>当网络刚刚出现/h2>p>当人们刚想到让两台计算机通信,模型是这样的:/p>p>img srchttp://zuoqy.com/images/2018-10-07/1.png alt1>/p>p>但上面过于简单的建模,无法使任意两台计算机之间的通信变得通用。分层的网络协议,使应用之间的通信时,应用本身不用关心网络的底层细节,例如如何拆包粘包,如何将字节序列转化成电信号等等。/p>p>img srchttp://zuoqy.com/images/2018-10-07/2.png alt2>/p>p>上面的模型依然存在问题,因为应用A在向B发送请求和数据包时,并不知道B是否能处理过来,如果B不能及时处理网络包,则会丢失数据。因此应用除了业务逻辑之外,还需要有专门的模块控制数据包的发送速度。/p>p>img srchttp://zuoqy.com/images/2018-10-07/3.png alt3>/p>p>幸运的是TCP/IP传输层协议的出现,从底层解决了流量控制和拥塞避免的问题,实现了可靠传输。/p>p>img srchttp://zuoqy.com/images/2018-10-07/4.png alt4>/p>p>上面的模型也成功的沿用了很长一段时间。/p>h2 id微服务出现>微服务出现/h2>p>随后计算机逐渐变得便宜,出现了更多的节点和更可靠的网络连接。业界开始使用各种类型的网络系统,出现了更细粒度的分布式agent和面向服务的体系架构(SOA,Service Oriented Architectures)但依旧较重的服务组件。/p>p>90年代,Peter Deutsch和他的同事共同提出了em>有关分布式系统的8条错误假设/em>(a hrefhttps://en.wikipedia.org/wiki/Fallacies_of_distributed_computing>The 8 Fallacies of Distributed Computing/a>):/p>ul>li>网络是可靠的/li>li>没有延迟/li>li>带宽无限大/li>li>网络是安全的/li>li>网络拓扑不会改变/li>li>只有一个管理员/li>li>传输成本是0/li>li>网络是同构的/li>/ul> div classpost-more-link text-center> a classbtn href/2018/10/07/Pattern-Service-Mesh/#more> Read more » /a> /div> /div> div classpost-footer> div classpost-tags> a href/tags/Cloud-Compute/> #Cloud Compute /a> a href/tags/Distributing-System/> #Distributing System /a> a href/tags/Service-Mesh/> #Service Mesh /a> /div> div classpost-eof>/div> /div> /div> /div> div classpagination> span classpage-number current>1/span>a classpage-number href/page/2/>2/a>span classspace>…/span>a classpage-number href/page/7/>7/a>a classextend next relnext href/page/2/>»/a> /div> /div> /div> div classsidebar-toggle> div classsidebar-toggle-line-wrap> span classsidebar-toggle-line sidebar-toggle-line-first>/span> span classsidebar-toggle-line sidebar-toggle-line-middle>/span> span classsidebar-toggle-line sidebar-toggle-line-last>/span> /div> /div> div idsidebar classsidebar> div classsidebar-inner> div classsite-overview> div classsite-author motion-element> img classsite-author-image srchttp://zuoqy.com/images/default_avatar.jpg altQiyang Zuo /> p classsite-author-name>Qiyang Zuo/p> /div> p classsite-description motion-element>Write something about Java Web development distributed computing technologies./p> div classsite-state motion-element> div classsite-state-item site-state-posts> a href/archives> span classsite-state-item-count>32/span> span classsite-state-item-name>posts/span> /a> /div> div classsite-state-item site-state-categories> a href/categories> span classsite-state-item-count>13/span> span classsite-state-item-name>categories/span> /a> /div> div classsite-state-item site-state-tags> a href/tags> span classsite-state-item-count>45/span> span classsite-state-item-name>tags/span> /a> /div> /div> div classfeed-link motion-element> a href/atom.xml> i classmenu-item-icon icon-feed>/i> RSS /a> /div> div classlinks-of-author motion-element> span classlinks-of-author-item> a hrefhttps://github.com/kid1412z target_blank>GitHub/a> /span> span classlinks-of-author-item> a hrefhttp://www.douban.com/people/64844277/ target_blank>Douban/a> /span> span classlinks-of-author-item> a hrefhttp://stackoverflow.com/users/4038986/qy-zuo target_blank>Stack Overflow/a> /span> /div> /div> /div> /div> /div> div idfooter classfooter> div classfooter-inner> div classcopyright> © 2018 span classauthor>Qiyang Zuo /span> | Powered by a classtheme-link hrefhttp://hexo.io>Hexo/a>/div> /div> /div> div classback-to-top>/div> /div> script typetext/javascript srchttp://zuoqy.com/vendors/jquery/index.js?v2.1.3>/script> script typetext/javascript srchttp://zuoqy.com/vendors/fancybox/source/jquery.fancybox.pack.js>/script> script typetext/javascript> $(document).ready(function() { $(.content img).each(function () { var $image $(this); var $imageWrapLink $image.parent(a); if ($imageWrapLink.size() 1) { $imageWrapLink $image.wrap(a href + this.getAttribute(src) + >/a>).parent(a); } $imageWrapLink.addClass(fancybox); }); }); $(.fancybox).fancybox({ helpers: { overlay: { locked: false } } }); /script> script typetext/javascript> function hasMobileUA () { var nav window.navigator; var ua nav.userAgent; var pa /iPad|iPhone|Android|Opera Mini|BlackBerry|webOS|UCWEB|Blazer|PSP|IEMobile|Symbian/g; return pa.test(ua); } function isDesktop () { return screen.width > 991 && !hasMobileUA(); } function isTablet () { return screen.width 992 && screen.width > 767 && hasMobileUA(); } function isMobile () { return screen.width 767 && hasMobileUA(); } function escapeSelector (selector) { return selector.replace(/!$%&()*+,.\/:;>?@\\\^`{|}~/g, \\$&) }/script> script typetext/javascript srchttp://zuoqy.com/vendors/velocity/velocity.min.js>/script> script typetext/javascript srchttp://zuoqy.com/vendors/velocity/velocity.ui.min.js>/script> script typetext/javascript idmotion.global> $(document).ready(function () { var body $(body); var isSidebarVisible false; var sidebarToggle $(.sidebar-toggle); var sidebarToggleLine1st $(.sidebar-toggle-line-first) var sidebarToggleLine2nd $(.sidebar-toggle-line-middle); var sidebarToggleLine3rd $(.sidebar-toggle-line-last); var sidebar $(.sidebar); var SIDEBAR_WIDTH 320px; var SIDEBAR_DISPLAY_DURATION 300; var sidebarToogleLineStatusInit {width: 100%, opacity: 1, left: 0, rotateZ: 0, top: 0}; var sidebarToggleLine1stStatusInit sidebarToogleLineStatusInit; var sidebarToggleLine1stStatusArrow {width: 50%, rotateZ: -45deg, top: 2px}; var sidebarToogleLine1stStatusClose {width: 100%, rotateZ: -45deg, top: 5px}; var sidebarToggleLine2ndStatusInit sidebarToogleLineStatusInit; var sidebarToggleLine2ndStatusArrow {width: 90%}; var sidebarToogleLine2ndStatusClose {opacity: 0}; var sidebarToggleLine3rdStatusInit sidebarToogleLineStatusInit; var sidebarToggleLine3rdStatusArrow {width: 50%, rotateZ: 45deg, top: -2px}; var sidebarToogleLine3rdStatusClose {width: 100%, rotateZ: 45deg, top: -5px}; LogoAndMenuMotion(); sidebatToggleMotion(); postsListMotion(); backToTopMotion(); $(document) .on(sidebar.isShowing, function () { isDesktop() && body.velocity( {paddingRight: SIDEBAR_WIDTH}, SIDEBAR_DISPLAY_DURATION ); sidebarContentMotion(); }) .on(sidebar.isHiding, function () {}); function LogoAndMenuMotion() { $.Velocity.RunSequence( { e: $(.brand), p: { opacity: 1 }, o: { duration: 100 } }, { e: $(.logo), p: { opacity: 1, top: 0 }, o: { duration: 50} }, { e: $(.logo-line-before i), p: { translateX: 100% }, o: { duration: 500, sequenceQueue: false } }, { e: $(.logo-line-after i), p: { translateX: -100% }, o: { duration: 500, sequenceQueue: false } }, { e: $(.site-title), p: { opacity: 1, top: 0 }, o: { duration: 200 } } ); $(.menu-item).velocity(transition.slideDownIn, {display: null}); } function backToTopMotion () { var b2top $(.back-to-top); b2top.on(click, function () { body.velocity(scroll); }); } function sidebarShowMotion () { sidebarToggleLine1st.velocity(sidebarToogleLine1stStatusClose); sidebarToggleLine2nd.velocity(sidebarToogleLine2ndStatusClose); sidebarToggleLine3rd.velocity(sidebarToogleLine3rdStatusClose); sidebar.velocity({width: SIDEBAR_WIDTH}, { display: block, duration: SIDEBAR_DISPLAY_DURATION, complete: function () { sidebar.addClass(sidebar-active); sidebar.trigger(sidebar.didShow); } }); sidebar.trigger(sidebar.isShowing); } function sidebarHideMotion () { isDesktop() && body.velocity({paddingRight: 0}); sidebar.velocity(reverse); sidebarToggleLine1st.velocity(sidebarToggleLine1stStatusInit); sidebarToggleLine2nd.velocity(sidebarToggleLine2ndStatusInit); sidebarToggleLine3rd.velocity(sidebarToggleLine3rdStatusInit); sidebar.removeClass(sidebar-active); sidebar.trigger(sidebar.isHiding); }; function sidebarContentMotion () { $(.sidebar .motion-element).velocity( transition.slideRightIn, {stagger: 50, drag: true} ); } function postsListMotion () { var postMotionOptions window.postMotionOptions || {stagger: 300, drag: true}; $(.post).velocity(transition.slideDownIn, postMotionOptions); } function sidebatToggleMotion () { sidebarToggle.on(click, function () { isSidebarVisible ? sidebarHideMotion() : sidebarShowMotion(); isSidebarVisible !isSidebarVisible; }); sidebarToggle.hover(function () { if (isSidebarVisible) {return} sidebarToggleLine1st.velocity(stop).velocity(sidebarToggleLine1stStatusArrow); sidebarToggleLine2nd.velocity(stop).velocity(sidebarToggleLine2ndStatusArrow); sidebarToggleLine3rd.velocity(stop).velocity(sidebarToggleLine3rdStatusArrow); }, function () { if (isSidebarVisible) {return} sidebarToggleLine1st.velocity(stop).velocity(sidebarToggleLine1stStatusInit); sidebarToggleLine2nd.velocity(stop).velocity(sidebarToggleLine2ndStatusInit); sidebarToggleLine3rd.velocity(stop).velocity(sidebarToggleLine3rdStatusInit); }); } });/script> script typetext/javascript> (function(b,o,i,l,e,r){b.GoogleAnalyticsObjectl;bl||(bl function(){(bl.qbl.q||).push(arguments)});bl.l+new Date; eo.createElement(i);ro.getElementsByTagName(i)0; e.src//www.google-analytics.com/analytics.js; r.parentNode.insertBefore(e,r)}(window,document,script,ga)); ga(create,UA-53494336-3);ga(send,pageview); /script> a hrefhttps://github.com/kid1412z classgithub-corner>svg width80 height80 viewBox0 0 250 250 stylefill:#151513; color:#fff; position: absolute; top: 0; border: 0; left: 0; transform: scale(-1, 1);>path dM0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z>/path>path dM128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2 fillcurrentColor styletransform-origin: 130px 106px; classocto-arm>/path>path dM115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z fillcurrentColor classocto-body>/path>/svg>style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}/style>/a>/body>/html>
Port 443
HTTP/1.1 200 OKConnection: keep-aliveContent-Length: 27959Server: GitHub.comContent-Type: text/html; charsetutf-8Last-Modified: Tue, 27 Nov 2018 14:09:43 GMTAccess-Control-Allow-Origin: *ETag: 5bfd5027-6d37expires: Fri, 09 Aug 2024 02:57:46 GMTCache-Control: max-age600x-proxy-cache: MISSX-GitHub-Request-Id: 0FFE:D894B:43E9D8C:45D5001:66B58350Accept-Ranges: bytesAge: 0Date: Fri, 09 Aug 2024 02:47:46 GMTVia: 1.1 varnishX-Served-By: cache-bfi-krnt7300081-BFIX-Cache: MISSX-Cache-Hits: 0X-Timer: S1723171666.333701,VS0,VE82Vary: Accept-EncodingX-Fastly-Request-ID: f0dc07104396fb1c981b33c15f70a24fa8b74d5b !doctype html>html classtheme-next use-motion theme-next-mist>head> meta charsetUTF-8/>meta http-equivX-UA-Compatible contentIEedge/>meta nameviewport contentwidthdevice-width, initial-scale1, maximum-scale1/> meta namegoogle-site-verification contentGgXgmwmTNbQickN-preU_L3kzGIRPxHZeE43Gxd_Fo8 /> link relstylesheet typetext/css hrefhttp://zuoqy.com/vendors/fancybox/source/jquery.fancybox.css?v2.1.5/>link relstylesheet typetext/css hrefhttp://zuoqy.com/css/main.css?v0.4.2/> meta namedescription contentWrite something about Java Web development distributed computing technologies. /> meta namekeywords contentJava,Algorithm,Machine Learning /> link relalternate href/atom.xml titleQ.Y Zuo Believes typeapplication/atom+xml /> link relshorticon icon typeimage/x-icon hrefhttp://zuoqy.com/favicon.ico /> title> Q.Y Zuo Believes /title>/head>body> div classcontainer one-column page-home > div classheadband>/div> div idheader classheader> div classheader-inner> h1 classsite-meta> span classlogo-line-before>i>/i>/span> a href/ classbrand> span classlogo> i classicon-logo>/i> /span> span classsite-title>Q.Y Zuo Believes/span> /a> span classlogo-line-after>i>/i>/span>/h1> ul idmenu classmenu> li classmenu-item menu-item-home> a href/> i classmenu-item-icon icon-home>/i> br /> Home /a> /li> li classmenu-item menu-item-categories> a href/categories> i classmenu-item-icon icon-categories>/i> br /> Categories /a> /li> li classmenu-item menu-item-archives> a href/archives> i classmenu-item-icon icon-archives>/i> br /> Archives /a> /li> li classmenu-item menu-item-tags> a href/tags> i classmenu-item-icon icon-tags>/i> br /> Tags /a> /li> /ul> /div> /div> div idmain classmain> div classmain-inner> div idcontent classcontent> div idposts classposts-expand> div classpost post-type-normal > div classpost-header> h1 classpost-title> a classpost-title-link href/2018/11/26/Golang-Memory-Model/> Go语言内存模型 /a> /h1> div classpost-meta> span classpost-time> Posted on 2018-11-26 /span> span classpost-category> | In a href/categories/golang/>golang/a> /span> /div> /div> div classpost-body> h2 idIntroduction>Introduction/h2>p>Go内存模型指定了一系列条件,在该条件下,可以保证在一个goroutine中对某个变量的读取操作可以观察(observe)到其他goroutine对这个变量写入的值。(内存可见性)/p>h2 idHappens-before>Happens-before/h2>p>指令重排序对goroutine内部的读写顺序可能有影响,但不会影响代码定义的当前goroutine整体的行为。br>例如在goroutine1中有代码code>a 1; b 2;/code>,在其他goroutine中可能观察到b先于a赋值,但对于goroutine1,其行为不会因为指令重排序发生变化。/p>p>Go语言中的Happens-Before:Happens-Before定义了内存操作的顺序。如果e1 happens-before e2, 则 e2 一定在e2发生之后才发生。如果e1 e2 没有happens-before的关系限制,则e1 e2是并发发生的。在单个goroutine内部, happens-before 次序就是程序定义的顺序。/p>p>读取操作r对变量v 可以观察到写入操作w对变量v的写入,必须同时满足如下两个条件:/p>ol>li>r不能先于w发生/li>li>没有其他的对变量v的写入操作w‘ 晚于 w 但 先于r发生/li>/ol>p>读取操作保证能观察到写入操作w对变量v的写入,必须同时满足如下两个条件:/p>ol>li>w 先于 r发生/li>li>任何其他对变量v的写入操作,要么先于w发生,要么晚于r发生。/li>/ol> div classpost-more-link text-center> a classbtn href/2018/11/26/Golang-Memory-Model/#more> Read more » /a> /div> /div> div classpost-footer> div classpost-tags> a href/tags/golang/> #golang /a> a href/tags/memory-model/> #memory model /a> /div> div classpost-eof>/div> /div> /div> div classpost post-type-normal > div classpost-header> h1 classpost-title> a classpost-title-link href/2018/11/06/Kubernates3-why-pod/> Kubernetes3 为什么需要Pod /a> /h1> div classpost-meta> span classpost-time> Posted on 2018-11-06 /span> span classpost-category> | In a href/categories/Cloud-Compute/>Cloud Compute/a> /span> /div> /div> div classpost-body> h2 id为什么需要Pod>为什么需要Pod/h2>ol>li>在工业实际部署中,经常需要多个进程部署在同一个节点上。类似于Linux操作系统中的进程组的概念(code>pstree -g/code> 命令查看进程组),他们之间有着”超亲密关系”,例如相互之间会发生直接的文件交换、使用localhost或者Socket文件进行本地通信、共享某些Linux Namespace等。/li>li>容器的”单进程模型”,PID1的进程往往是应用本身,无法像正常操作系统中的init进程那样拥有进程管理的功能。/li>li>存在”超亲密关系”的进程,需要按照严格的拓扑顺序启动。也就是需要对容器成组进行调度(gang scheduling)。br>基于上述原因,Kubernetes提供了Pod这个逻辑概念,将需要在同一节点上,可能共享Namespace以及其他本地资源的容器进行成组调度。/li>/ol>h2 idPod的实现机制>Pod的实现机制/h2>p>Pod是逻辑概念,其实是一组共享了某些资源(Network Namespace)的容器组。在没有成组调度时,如要实现容器A和容器B共享网络和Volume,可以通过如下命令实现:br> div classpost-more-link text-center> a classbtn href/2018/11/06/Kubernates3-why-pod/#more> Read more » /a> /div> /div> div classpost-footer> div classpost-tags> a href/tags/kubernetes/> #kubernetes /a> /div> div classpost-eof>/div> /div> /div> div classpost post-type-normal > div classpost-header> h1 classpost-title> a classpost-title-link href/2018/10/29/Kubernates2-essential-concept/> Kubernetes2 基本概念 /a> /h1> div classpost-meta> span classpost-time> Posted on 2018-10-29 /span> span classpost-category> | In a href/categories/Cloud-Compute/>Cloud Compute/a> /span> /div> /div> div classpost-body> h2 id要解决什么问题>要解决什么问题/h2>p>可以方便的将用户应用的镜像部署到集群,并提供路由网关、水平扩展、监控、备份灾难恢复等一系列运维能力。这些问题,其实一个PAAS平台都可以解决。/p>p>除了解决以上问题,Kubernetes项目区别于其他PAAS平台,重点要解决的问题,来自于Borg项目的研究人员在论文中的一个重要观点:/p>blockquote>p>运行在大规模集群中的各个任务之间,存在着各种各样的关系。这些关系的处理,才是作业编排和管理系统最困难的地方。/p>/blockquote>h2 id需要什么样的架构>需要什么样的架构/h2>ul>li>节点分为控制节点Master和计算节点Node/li>li>Master节点包含kube-controller, kube-api-server 和 kube-scheduler三个组件/li>li>Node节点中的核心组件kubelet:ul>li>通过CNI(Container Networking Interface)与网络插件交互,配置容器网络;/li>li>通过CSI(Container Storage Interface)与存储插件交互,配置持久化存储;/li>li>通过CRI(Container Runtime Interface)与容器运行时交互,定义容器运行时的各项操作。/li>li>容器运行时通过OCI容器运行时规范,与Linux操作系统交互。 div classpost-more-link text-center> a classbtn href/2018/10/29/Kubernates2-essential-concept/#more> Read more » /a> /div> /div> div classpost-footer> div classpost-tags> a href/tags/kubernetes/> #kubernetes /a> /div> div classpost-eof>/div> /div> /div> div classpost post-type-normal > div classpost-header> h1 classpost-title> a classpost-title-link href/2018/10/17/communicate-effectively/> 如何有效地沟通 /a> /h1> div classpost-meta> span classpost-time> Posted on 2018-10-17 /span> span classpost-category> | In a href/categories/Reading/>Reading/a> /span> /div> /div> div classpost-body> p>在吴军老师新书《态度》写给其女儿一封信中,提到了如何有效地沟通:/p>p>strong>第一,有效的沟通要以对方确认为准,不要以为话说出去,别人就一定能接收了你传递的信息。/strong>br>(那么反过来,自己要做到对别人来讲”靠谱”,就是”凡事有交代,件件有着落,事事有回应。”)/p>p>strong>第二,要以对方听得懂的话来沟通,不要把简单的问题讲复杂了。/strong> 这里作者举了一个很好的例子:/p>blockquote>p>中国的顾维钧先生是一个优秀的外交家,他在1919年的巴黎和会上向西方国家的代表讲述山东省对中国的重要性时,是这样说的:br>孔子对中国人来说,相当于耶稣对西方人一样重要。西方人一直把耶路撒冷作为圣地,并且上千年一直要夺回那个地方。br>山东是孔子的出生地,它在中国人心中的地位,相当于耶路撒冷在西方人心中的地位。/p>/blockquote>p>简单的几句话,就把意思说明白了。对方能听懂,不是因为对山东和孔子有多么熟悉,而是因为熟知耶路撒冷和耶稣。/p>p>strong>第三,沟通要简洁,切中要害。对不同的人,表达方式也不一样。/strong>/p>p>strong>第四,善辩不等于好的沟通,沟通的目的是让对方接受自己的想法,而非把对方驳得哑口无言。/strong>/p> /div> div classpost-footer> div classpost-tags> a href/tags/Reading/> #Reading /a> a href/tags/态度/> #态度 /a> a href/tags/沟通/> #沟通 /a> /div> div classpost-eof>/div> /div> /div> div classpost post-type-normal > div classpost-header> h1 classpost-title> a classpost-title-link href/2018/10/07/Pattern-Service-Mesh/> Pattern Service Mesh /a> /h1> div classpost-meta> span classpost-time> Posted on 2018-10-07 /span> span classpost-category> | In a href/categories/Distributing-System-Service-Mesh/>Distributing System, Service Mesh/a> /span> /div> /div> div classpost-body> h2 id当网络刚刚出现>当网络刚刚出现/h2>p>当人们刚想到让两台计算机通信,模型是这样的:/p>p>img srchttp://zuoqy.com/images/2018-10-07/1.png alt1>/p>p>但上面过于简单的建模,无法使任意两台计算机之间的通信变得通用。分层的网络协议,使应用之间的通信时,应用本身不用关心网络的底层细节,例如如何拆包粘包,如何将字节序列转化成电信号等等。/p>p>img srchttp://zuoqy.com/images/2018-10-07/2.png alt2>/p>p>上面的模型依然存在问题,因为应用A在向B发送请求和数据包时,并不知道B是否能处理过来,如果B不能及时处理网络包,则会丢失数据。因此应用除了业务逻辑之外,还需要有专门的模块控制数据包的发送速度。/p>p>img srchttp://zuoqy.com/images/2018-10-07/3.png alt3>/p>p>幸运的是TCP/IP传输层协议的出现,从底层解决了流量控制和拥塞避免的问题,实现了可靠传输。/p>p>img srchttp://zuoqy.com/images/2018-10-07/4.png alt4>/p>p>上面的模型也成功的沿用了很长一段时间。/p>h2 id微服务出现>微服务出现/h2>p>随后计算机逐渐变得便宜,出现了更多的节点和更可靠的网络连接。业界开始使用各种类型的网络系统,出现了更细粒度的分布式agent和面向服务的体系架构(SOA,Service Oriented Architectures)但依旧较重的服务组件。/p>p>90年代,Peter Deutsch和他的同事共同提出了em>有关分布式系统的8条错误假设/em>(a hrefhttps://en.wikipedia.org/wiki/Fallacies_of_distributed_computing>The 8 Fallacies of Distributed Computing/a>):/p>ul>li>网络是可靠的/li>li>没有延迟/li>li>带宽无限大/li>li>网络是安全的/li>li>网络拓扑不会改变/li>li>只有一个管理员/li>li>传输成本是0/li>li>网络是同构的/li>/ul> div classpost-more-link text-center> a classbtn href/2018/10/07/Pattern-Service-Mesh/#more> Read more » /a> /div> /div> div classpost-footer> div classpost-tags> a href/tags/Cloud-Compute/> #Cloud Compute /a> a href/tags/Distributing-System/> #Distributing System /a> a href/tags/Service-Mesh/> #Service Mesh /a> /div> div classpost-eof>/div> /div> /div> /div> div classpagination> span classpage-number current>1/span>a classpage-number href/page/2/>2/a>span classspace>…/span>a classpage-number href/page/7/>7/a>a classextend next relnext href/page/2/>»/a> /div> /div> /div> div classsidebar-toggle> div classsidebar-toggle-line-wrap> span classsidebar-toggle-line sidebar-toggle-line-first>/span> span classsidebar-toggle-line sidebar-toggle-line-middle>/span> span classsidebar-toggle-line sidebar-toggle-line-last>/span> /div> /div> div idsidebar classsidebar> div classsidebar-inner> div classsite-overview> div classsite-author motion-element> img classsite-author-image srchttp://zuoqy.com/images/default_avatar.jpg altQiyang Zuo /> p classsite-author-name>Qiyang Zuo/p> /div> p classsite-description motion-element>Write something about Java Web development distributed computing technologies./p> div classsite-state motion-element> div classsite-state-item site-state-posts> a href/archives> span classsite-state-item-count>32/span> span classsite-state-item-name>posts/span> /a> /div> div classsite-state-item site-state-categories> a href/categories> span classsite-state-item-count>13/span> span classsite-state-item-name>categories/span> /a> /div> div classsite-state-item site-state-tags> a href/tags> span classsite-state-item-count>45/span> span classsite-state-item-name>tags/span> /a> /div> /div> div classfeed-link motion-element> a href/atom.xml> i classmenu-item-icon icon-feed>/i> RSS /a> /div> div classlinks-of-author motion-element> span classlinks-of-author-item> a hrefhttps://github.com/kid1412z target_blank>GitHub/a> /span> span classlinks-of-author-item> a hrefhttp://www.douban.com/people/64844277/ target_blank>Douban/a> /span> span classlinks-of-author-item> a hrefhttp://stackoverflow.com/users/4038986/qy-zuo target_blank>Stack Overflow/a> /span> /div> /div> /div> /div> /div> div idfooter classfooter> div classfooter-inner> div classcopyright> © 2018 span classauthor>Qiyang Zuo /span> | Powered by a classtheme-link hrefhttp://hexo.io>Hexo/a>/div> /div> /div> div classback-to-top>/div> /div> script typetext/javascript srchttp://zuoqy.com/vendors/jquery/index.js?v2.1.3>/script> script typetext/javascript srchttp://zuoqy.com/vendors/fancybox/source/jquery.fancybox.pack.js>/script> script typetext/javascript> $(document).ready(function() { $(.content img).each(function () { var $image $(this); var $imageWrapLink $image.parent(a); if ($imageWrapLink.size() 1) { $imageWrapLink $image.wrap(a href + this.getAttribute(src) + >/a>).parent(a); } $imageWrapLink.addClass(fancybox); }); }); $(.fancybox).fancybox({ helpers: { overlay: { locked: false } } }); /script> script typetext/javascript> function hasMobileUA () { var nav window.navigator; var ua nav.userAgent; var pa /iPad|iPhone|Android|Opera Mini|BlackBerry|webOS|UCWEB|Blazer|PSP|IEMobile|Symbian/g; return pa.test(ua); } function isDesktop () { return screen.width > 991 && !hasMobileUA(); } function isTablet () { return screen.width 992 && screen.width > 767 && hasMobileUA(); } function isMobile () { return screen.width 767 && hasMobileUA(); } function escapeSelector (selector) { return selector.replace(/!$%&()*+,.\/:;>?@\\\^`{|}~/g, \\$&) }/script> script typetext/javascript srchttp://zuoqy.com/vendors/velocity/velocity.min.js>/script> script typetext/javascript srchttp://zuoqy.com/vendors/velocity/velocity.ui.min.js>/script> script typetext/javascript idmotion.global> $(document).ready(function () { var body $(body); var isSidebarVisible false; var sidebarToggle $(.sidebar-toggle); var sidebarToggleLine1st $(.sidebar-toggle-line-first) var sidebarToggleLine2nd $(.sidebar-toggle-line-middle); var sidebarToggleLine3rd $(.sidebar-toggle-line-last); var sidebar $(.sidebar); var SIDEBAR_WIDTH 320px; var SIDEBAR_DISPLAY_DURATION 300; var sidebarToogleLineStatusInit {width: 100%, opacity: 1, left: 0, rotateZ: 0, top: 0}; var sidebarToggleLine1stStatusInit sidebarToogleLineStatusInit; var sidebarToggleLine1stStatusArrow {width: 50%, rotateZ: -45deg, top: 2px}; var sidebarToogleLine1stStatusClose {width: 100%, rotateZ: -45deg, top: 5px}; var sidebarToggleLine2ndStatusInit sidebarToogleLineStatusInit; var sidebarToggleLine2ndStatusArrow {width: 90%}; var sidebarToogleLine2ndStatusClose {opacity: 0}; var sidebarToggleLine3rdStatusInit sidebarToogleLineStatusInit; var sidebarToggleLine3rdStatusArrow {width: 50%, rotateZ: 45deg, top: -2px}; var sidebarToogleLine3rdStatusClose {width: 100%, rotateZ: 45deg, top: -5px}; LogoAndMenuMotion(); sidebatToggleMotion(); postsListMotion(); backToTopMotion(); $(document) .on(sidebar.isShowing, function () { isDesktop() && body.velocity( {paddingRight: SIDEBAR_WIDTH}, SIDEBAR_DISPLAY_DURATION ); sidebarContentMotion(); }) .on(sidebar.isHiding, function () {}); function LogoAndMenuMotion() { $.Velocity.RunSequence( { e: $(.brand), p: { opacity: 1 }, o: { duration: 100 } }, { e: $(.logo), p: { opacity: 1, top: 0 }, o: { duration: 50} }, { e: $(.logo-line-before i), p: { translateX: 100% }, o: { duration: 500, sequenceQueue: false } }, { e: $(.logo-line-after i), p: { translateX: -100% }, o: { duration: 500, sequenceQueue: false } }, { e: $(.site-title), p: { opacity: 1, top: 0 }, o: { duration: 200 } } ); $(.menu-item).velocity(transition.slideDownIn, {display: null}); } function backToTopMotion () { var b2top $(.back-to-top); b2top.on(click, function () { body.velocity(scroll); }); } function sidebarShowMotion () { sidebarToggleLine1st.velocity(sidebarToogleLine1stStatusClose); sidebarToggleLine2nd.velocity(sidebarToogleLine2ndStatusClose); sidebarToggleLine3rd.velocity(sidebarToogleLine3rdStatusClose); sidebar.velocity({width: SIDEBAR_WIDTH}, { display: block, duration: SIDEBAR_DISPLAY_DURATION, complete: function () { sidebar.addClass(sidebar-active); sidebar.trigger(sidebar.didShow); } }); sidebar.trigger(sidebar.isShowing); } function sidebarHideMotion () { isDesktop() && body.velocity({paddingRight: 0}); sidebar.velocity(reverse); sidebarToggleLine1st.velocity(sidebarToggleLine1stStatusInit); sidebarToggleLine2nd.velocity(sidebarToggleLine2ndStatusInit); sidebarToggleLine3rd.velocity(sidebarToggleLine3rdStatusInit); sidebar.removeClass(sidebar-active); sidebar.trigger(sidebar.isHiding); }; function sidebarContentMotion () { $(.sidebar .motion-element).velocity( transition.slideRightIn, {stagger: 50, drag: true} ); } function postsListMotion () { var postMotionOptions window.postMotionOptions || {stagger: 300, drag: true}; $(.post).velocity(transition.slideDownIn, postMotionOptions); } function sidebatToggleMotion () { sidebarToggle.on(click, function () { isSidebarVisible ? sidebarHideMotion() : sidebarShowMotion(); isSidebarVisible !isSidebarVisible; }); sidebarToggle.hover(function () { if (isSidebarVisible) {return} sidebarToggleLine1st.velocity(stop).velocity(sidebarToggleLine1stStatusArrow); sidebarToggleLine2nd.velocity(stop).velocity(sidebarToggleLine2ndStatusArrow); sidebarToggleLine3rd.velocity(stop).velocity(sidebarToggleLine3rdStatusArrow); }, function () { if (isSidebarVisible) {return} sidebarToggleLine1st.velocity(stop).velocity(sidebarToggleLine1stStatusInit); sidebarToggleLine2nd.velocity(stop).velocity(sidebarToggleLine2ndStatusInit); sidebarToggleLine3rd.velocity(stop).velocity(sidebarToggleLine3rdStatusInit); }); } });/script> script typetext/javascript> (function(b,o,i,l,e,r){b.GoogleAnalyticsObjectl;bl||(bl function(){(bl.qbl.q||).push(arguments)});bl.l+new Date; eo.createElement(i);ro.getElementsByTagName(i)0; e.src//www.google-analytics.com/analytics.js; r.parentNode.insertBefore(e,r)}(window,document,script,ga)); ga(create,UA-53494336-3);ga(send,pageview); /script> a hrefhttps://github.com/kid1412z classgithub-corner>svg width80 height80 viewBox0 0 250 250 stylefill:#151513; color:#fff; position: absolute; top: 0; border: 0; left: 0; transform: scale(-1, 1);>path dM0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z>/path>path dM128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2 fillcurrentColor styletransform-origin: 130px 106px; classocto-arm>/path>path dM115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z fillcurrentColor classocto-body>/path>/svg>style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}/style>/a>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]