??xml version="1.0" encoding="utf-8" standalone="yes"?>BlogJava-所有随W区http://www.ymeg.top/all专注于Java技?/description>zh-cnMon, 19 Aug 2019 12:44:20 GMTMon, 19 Aug 2019 12:44:20 GMT60Dell G3 Win10 SDD+HDD盘EFI引导不用U盘安装Ubuntuhttp://www.ymeg.top/bacoo/archive/2019/08/19/434461.htmlso trueso trueMon, 19 Aug 2019 02:26:00 GMThttp://www.ymeg.top/bacoo/archive/2019/08/19/434461.htmlhttp://www.ymeg.top/bacoo/comments/434461.htmlhttp://www.ymeg.top/bacoo/archive/2019/08/19/434461.html#Feedback0http://www.ymeg.top/bacoo/comments/commentRss/434461.htmlhttp://www.ymeg.top/bacoo/services/trackbacks/434461.html
1. Win10关闭快速启动;
2. Win10关闭BitLockerQ?/div>
3. Win10下压~磁盘,留出一块未分配的区域X用于安装ubuntuQ再搞出一?GB的FAT32分区Q把下蝲好的iso镜像释放到里面;
4. BIOS关闭Secure BootQ?/div>
5. BIOS关闭SATA的RAIDQ设|ؓAHCIQ?/div>
6. 启动时F12Q选择那个3GB的FAT32启动Q默认会自动探测刎ͼ否则在BOOT SEQUENCE里手动增加一下)Q?/div>
7. 选择try Ubuntuq去q行安装Q?/div>
8. 安装前先sudo umount -l /dev/xxx, xxx是光盘镜像文件所在的盘,以避免安装过E卡在detecting file systems阶段不动Q?/div>
9. 安装cd选择其他选项Q?/div>
10. 在预留空间X上分50GBl?Q分X-80l?homeQ分30lswapQ?/div>
11. 安装启动引导器的讑֤Q选择Windows Boot Manager所在的分区Q分区类型是EFIQ;
12. 如果出现"The 'grub-efi-amd64-signed' package failed to install into /target/."之类的错误,是因为缺包,重新安装Q勾选开启网lƈ允许下蝲包的选项q行安装卛_Q?br />
参考文章:
https://blog.csdn.net/github_37603222/article/details/70833565


so true 2019-08-19 10:26 发表评论
]]>淘宝千万Uƈ发分布式架构?4ơ演q?/title><link>http://www.ymeg.top/paulwong/archive/2019/08/16/434451.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 16 Aug 2019 02:05:00 GMT</pubDate><guid>http://www.ymeg.top/paulwong/archive/2019/08/16/434451.html</guid><wfw:comment>http://www.ymeg.top/paulwong/comments/434451.html</wfw:comment><comments>http://www.ymeg.top/paulwong/archive/2019/08/16/434451.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.ymeg.top/paulwong/comments/commentRss/434451.html</wfw:commentRss><trackback:ping>http://www.ymeg.top/paulwong/services/trackbacks/434451.html</trackback:ping><description><![CDATA[<p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>一、概q?/strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">本文以淘宝作Z子,介绍从一百个q发到千万q发情况下服务端的架构的演进q程Q同时列丑և每个演进阶段会遇到的相关技术,让大家对架构的演q有一个整体的认知Q文章最后汇M一些架构设计的原则?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>二、基本概?/strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">在介l架构之前,Z避免部分读者对架构设计中的一些概念不了解Q下面对几个最基础的概念进行介l:</p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>1Q分布式</strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">pȝ中的多个模块在不同服务器上部|Ԍ卛_UCؓ分布式系l,如Tomcat和数据库分别部v在不同的服务器上Q或两个相同功能的Tomcat分别部v在不同服务器上?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>2Q高可用</strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">pȝ中部分节点失效时Q其他节点能够接替它l箋提供服务Q则可认为系l具有高可用性?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>3Q集?/strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">一个特定领域的软g部v在多台服务器上ƈ作ؓ一个整体提供一cL务,q个整体UCؓ集群。如Zookeeper中的Master和Slave分别部v在多台服务器上,共同l成一个整体提供集中配|服务?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">在常见的集群中,客户端往往能够q接L一个节点获得服务,q且当集中一个节ҎU时Q其他节点往往能够自动的接替它l箋提供服务Q这时候说明集具有高可用性?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>4Q负载均?/strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">h发送到pȝӞ通过某些方式把请求均匀分发到多个节点上Qɾpȝ中每个节点能够均匀的处理请求负载,则可认ؓpȝ是负载均衡的?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>5Q正向代理和反向代理</strong></p> <ul style="list-style-type: none; margin: 0px 0px 1em; padding: 0px; line-height: 0px;"> <li style="margin: 0px; padding: 0px 0px 0px 9px; line-height: 28px; zoom: 1; background: url("img/bullet1.png") left 0.9em no-repeat;">pȝ内部要访问外部网l时Q统一通过一个代理服务器把请求{发出去,在外部网l看来就是代理服务器发v的访问,此时代理服务器实现的是正向代理;</li> <li style="margin: 0px; padding: 0px 0px 0px 9px; line-height: 28px; zoom: 1; background: url("img/bullet1.png") left 0.9em no-repeat;">当外部请求进入系l时Q代理服务器把该h转发到系l中的某台服务器上,对外部请求来_与之交互的只有代理服务器Q此时代理服务器实现的是反向代理?/li> </ul> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">单来_正向代理是代理服务器代替pȝ内部来访问外部网l的q程Q反向代理是外部h讉Kpȝ旉过代理服务器{发到内部服务器的q程?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>三、架构演q?/strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>单机架构</strong></p> <figure style="max-width: 100%; margin-bottom: 1em; margin-left: 0px; margin-right: 0px;"><img src="http://p1.pstatp.com/large/pgc-image/RSQI5TRAP4kzbG" alt="淘宝千万Uƈ发分布式架构?4ơ演q? style="height: auto; max-width: 100%; width: auto;" /></figure> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">以淘宝作Z子。在|站最初时Q应用数量与用户数都较少Q可以把Tomcat和数据库部v在同一台服务器上。浏览器往<em>www</em>.taobao<em>.com</em>发vhӞ首先l过DNS服务器(域名pȝQ把域名转换为实际IP地址10.102.4.1Q浏览器转而访问该IP对应的Tomcat?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">随着用户数的增长QTomcat和数据库之间竞争资源Q单机性能不以支撑业务?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>W一ơ演q:</strong><strong>Tomcat与数据库分开部v</strong></p> <figure style="max-width: 100%; margin-bottom: 1em; margin-left: 0px; margin-right: 0px;"><img src="http://p1.pstatp.com/large/pgc-image/RSQI5ThIKTi6Dq" alt="淘宝千万Uƈ发分布式架构?4ơ演q? style="height: auto; max-width: 100%; width: auto;" /></figure> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">Tomcat和数据库分别独占服务器资源,显著提高两者各自性能?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">随着用户数的增长Qƈ发读写数据库成ؓ瓉?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>W二ơ演q:</strong><strong>引入本地~存和分布式~存</strong></p> <figure style="max-width: 100%; margin-bottom: 1em; margin-left: 0px; margin-right: 0px;"><img src="http://p1.pstatp.com/large/pgc-image/RSQI5TtIa6VPVc" alt="淘宝千万Uƈ发分布式架构?4ơ演q? style="height: auto; max-width: 100%; width: auto;" /></figure> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">在Tomcat同服务器上或同JVM中增加本地缓存,q在外部增加分布式缓存,~存热门商品信息或热门商品的html面{。通过~存能把l大多数h在读写数据库前拦截掉Q?em>大大</em>降低数据库压力?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">其中涉及的技术包括:使用memcached作ؓ本地~存Q用Redis作ؓ分布式缓存,q会涉及~存一致性、缓存穿?ȝ、缓存雪崩、热Ҏ据集中失效等问题?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">~存抗住了大部分的访问请求,随着用户数的增长Qƈ发压力主要落在单机的Tomcat上,响应逐渐变慢?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>W三ơ演q:</strong><strong>引入反向代理实现负蝲均衡</strong></p> <figure style="max-width: 100%; margin-bottom: 1em; margin-left: 0px; margin-right: 0px;"><img src="http://p3.pstatp.com/large/pgc-image/RSQI5U46rS0yEH" alt="淘宝千万Uƈ发分布式架构?4ơ演q? style="height: auto; max-width: 100%; width: auto;" /></figure> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">在多台服务器上分别部|TomcatQ用反向代理YӞNginxQ把h均匀分发到每个Tomcat中?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">此处假设Tomcat最多支?00个ƈ发,Nginx最多支?0000个ƈ发,那么理论上Nginx把请求分发到500个Tomcat上,p抗住50000个ƈ发?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">其中涉及的技术包括:Nginx、HAProxyQ两者都是工作在|络W七层的反向代理软gQ主要支持http协议Q还会涉及session׃n、文件上传下载的问题?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">反向代理使应用服务器可支持的q发?em>大大</em>增加Q但q发量的增长也意味着更多hIK到数据库,单机的数据库最l成为瓶颈?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>W四ơ演q:</strong><strong>数据库读写分?/strong></p> <figure style="max-width: 100%; margin-bottom: 1em; margin-left: 0px; margin-right: 0px;"><img src="http://p1.pstatp.com/large/pgc-image/RSQI5UGC3HaOFm" alt="淘宝千万Uƈ发分布式架构?4ơ演q? style="height: auto; max-width: 100%; width: auto;" /></figure> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">把数据库划分库和写库Q读库可以有多个Q通过同步机制把写库的数据同步到读库,对于需要查询最新写入数据场景,可通过在缓存中多写一份,通过~存获得最新数据?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">其中涉及的技术包括:MycatQ它是数据库中间Ӟ可通过它来l织数据库的分离d和分库分表,客户端通过它来讉K下层数据库,q会涉及数据同步Q数据一致性的问题?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">业务逐渐变多Q不同业务之间的讉K量差距较大,不同业务直接竞争数据库,怺影响性能?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>W五ơ演q:数据库按业务分库</strong></p> <figure style="max-width: 100%; margin-bottom: 1em; margin-left: 0px; margin-right: 0px;"><img src="http://p1.pstatp.com/large/pgc-image/RSQI5Ys1VzwsKT" alt="淘宝千万Uƈ发分布式架构?4ơ演q? style="height: auto; max-width: 100%; width: auto;" /></figure> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">把不同业务的数据保存C同的数据库中Q业务之间的资源竞争降低,对于讉K量大的业务,可以部v更多的服务器来支撑?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">q样同时D跨业务的表无法直接做兌分析Q需要通过其他途径来解冻I但这不是本文讨论的重点,有兴的可以自行搜烦解决Ҏ?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">随着用户数的增长Q单机的写库会逐渐会达到性能瓉?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>W六ơ演q:</strong><strong>把大表拆分ؓ表</strong></p> <figure style="max-width: 100%; margin-bottom: 1em; margin-left: 0px; margin-right: 0px;"><img src="http://p3.pstatp.com/large/pgc-image/RSQI5Z615L3Uqz" alt="淘宝千万Uƈ发分布式架构?4ơ演q? style="height: auto; max-width: 100%; width: auto;" /></figure> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">比如针对评论数据Q可按照商品IDq行hashQ\由到对应的表中存储;针对支付记录Q可按照时创徏表,每个时表l拆分ؓ表Q用用户ID或记录编h路由数据?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">只要实时操作的表数据量够小Q请求能够够均匀的分发到多台服务器上的小表,那数据库p通过水^扩展的方式来提高性能。其中前面提到的Mycat也支持在大表拆分为小表情况下的访问控制?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">q种做法显著的增加了数据库运l的隑ֺQ对DBA的要求较高。数据库设计到这U结构时Q已l可以称为分布式数据库,但是q只是一个逻辑的数据库整体Q数据库里不同的l成部分是由不同的组件单独来实现的?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">如分库分表的理和请求分发,由Mycat实现QSQL的解析由单机的数据库实现Q读写分d能由|关和消息队列来实现Q查询结果的汇d能由数据库接口层来实现等{,q种架构其实是MPPQ大规模q行处理Q架构的一cd现?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">目前开源和商用都已l有不少MPP数据库,开源中比较行的有Greenplum、TiDB、Postgresql XC、HAWQ{,商用的如南大通用的GBase、睿帆科技的雪球DB、华为的LibrA{等?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">不同的MPP数据库的侧重点也不一P如TiDB更侧重于分布式OLTP场景QGreenplum更侧重于分布式OLAP场景?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">q些MPP数据库基本都提供了类似Postgresql、Oracle、MySQL那样的SQL标准支持能力Q能把一个查询解析ؓ分布式的执行计划分发到每台机器上q行执行Q最l由数据库本w汇L据进行返回?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">也提供了诸如权限理、分库分表、事务、数据副本等能力Qƈ且大多能够支?00个节点以上的集群Q?em>大大</em>降低了数据库q维的成本,q且使数据库也能够实现水qx展?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">数据库和Tomcat都能够水qx展,可支撑的q发大幅提高Q随着用户数的增长Q最l单机的Nginx会成为瓶颈?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>W七ơ演q:</strong><strong>使用LVS或F5来多个Nginx负蝲均衡</strong></p> <figure style="max-width: 100%; margin-bottom: 1em; margin-left: 0px; margin-right: 0px;"><img src="http://p1.pstatp.com/large/pgc-image/RSQI5ZHDxQFS1r" alt="淘宝千万Uƈ发分布式架构?4ơ演q? style="height: auto; max-width: 100%; width: auto;" /></figure> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">׃瓉在NginxQ因此无法通过两层的Nginx来实现多个Nginx的负载均衡?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">图中的LVS和F5是工作在|络W四层的负蝲均衡解决ҎQ其中LVS是YӞq行在操作系l内核态,可对TCPh或更高层U的|络协议q行转发Q因此支持的协议更丰富,q且性能也远高于NginxQ可假设单机的LVS可支持几<em>十万</em>个ƈ发的h转发QF5是一U负载均衡硬Ӟ与LVS提供的能力类|性能比LVS更高Q但h昂贵?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">׃LVS是单机版的YӞ若LVS所在服务器宕机则会D整个后端pȝ都无法访问,因此需要有备用节点。可使用keepalived软g模拟拟IPQ然后把虚拟IPl定到多台LVS服务器上Q浏览器讉K虚拟IPӞ会被路由器重定向到真实的LVS服务器,当主LVS服务器宕机时Qkeepalived软g会自动更新\由器中的路由表,把虚拟IP重定向到另外一台正常的LVS服务器,从而达到LVS服务器高可用的效果?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">此处需要注意的是,上图中从Nginx层到Tomcat层这Lq不代表全部Nginx都{发请求到全部的Tomcat?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">在实际用时Q可能会是几个Nginx下面接一部分的TomcatQ这些Nginx之间通过keepalived实现高可用,其他的Nginx接另外的TomcatQ这样可接入的Tomcat数量p成倍的增加?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">׃LVS也是单机的,随着q发数增长到?em>十万</em>ӞLVS服务器最l会辑ֈ瓉Q此时用h辑ֈ千万甚至上亿U别Q用户分布在不同的地区,与服务器机房距离不同Q导致了讉K的gq会明显不同?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>W八ơ演q:</strong><strong>通过DNS轮询实现机房间的负蝲均衡</strong></p> <figure style="max-width: 100%; margin-bottom: 1em; margin-left: 0px; margin-right: 0px;"><img src="http://p9.pstatp.com/large/pgc-image/RSQI5ZS2uQgqcv" alt="淘宝千万Uƈ发分布式架构?4ơ演q? style="height: auto; max-width: 100%; width: auto;" /></figure> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">在DNS服务器中可配|一个域名对应多个IP地址Q每个IP地址对应C同的机房里的虚拟IP?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">当用戯?em>www</em>.taobao<em>.com</em>ӞDNS服务器会使用轮询{略或其他策略,来选择某个IP供用戯问。此方式能实现机戉K的负载均衡,xQ系l可做到机房U别的水qx展,千万U到亿的ƈ发量都可通过增加机房来解冻Ipȝ入口处的hq发量不再是问题?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">随着数据的丰富程度和业务的发展,索、分析等需求越来越丰富Q单单依靠数据库无法解决如此丰富的需求?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>W九ơ演q:</strong><strong>引入NoSQL数据库和搜烦引擎{技?/strong></p> <figure style="max-width: 100%; margin-bottom: 1em; margin-left: 0px; margin-right: 0px;"><img src="http://p3.pstatp.com/large/pgc-image/RSQI5Zg6I1Hn9B" alt="淘宝千万Uƈ发分布式架构?4ơ演q? style="height: auto; max-width: 100%; width: auto;" /></figure> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">当数据库中的数据多到一定规模时Q数据库׃适用于复杂的查询了,往往只能满普通查询的场景?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">对于l计报表场景Q在数据量大时不一定能跑出l果Q而且在跑复杂查询时会D其他查询变慢Q对于全文检索、可变数据结构等场景Q数据库天生不适用?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">因此需要针对特定的场景Q引入合适的解决Ҏ。如对于量文g存储Q可通过分布式文件系lHDFS解决Q对于key valuecd的数据,可通过HBase和Redis{方案解冻I对于全文索场景,可通过搜烦引擎如ElasticSearch解决Q对于多l分析场景,可通过Kylin或Druid{方案解冟?/p> <div ap_container"="" style="text-align: center; width: 862px; height: auto; clear: none;"><iframe width="862" height="200" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true" id="aswift_5" name="aswift_5" style="max-width: 100%; margin: 0px auto; display: block; left: 0px; position: absolute; top: 0px; border-width: 0px; border-style: initial; width: 862px; height: 200px;"></iframe></div> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">当然Q引入更多组件同时会提高pȝ的复杂度Q不同的lg保存的数据需要同步,需要考虑一致性的问题Q需要有更多的运l手D|理q些lg{?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">引入更多lg解决了丰富的需求,业务l度能够极大扩充Q随之而来的是一个应用中包含了太多的业务代码Q业务的升q代变得困难?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>W十ơ演q:</strong><strong>大应用拆分ؓ应?/strong></p> <figure style="max-width: 100%; margin-bottom: 1em; margin-left: 0px; margin-right: 0px;"><img src="http://p3.pstatp.com/large/pgc-image/RSQI5ja85PZxO1" alt="淘宝千万Uƈ发分布式架构?4ơ演q? style="height: auto; max-width: 100%; width: auto;" /></figure> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">按照业务板块来划分应用代码,使单个应用的职责更清晎ͼ怺之间可以做到独立升q代。这时候应用之间可能会涉及C些公共配|,可以通过分布式配|中心Zookeeper来解冟?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">不同应用之间存在q的模块,由应用单独管理会D相同代码存在多䆾Q导致公共功能升U时全部应用代码都要跟着升?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>W十一ơ演q:</strong><strong>复用的功能抽L微服?/strong></p> <figure style="max-width: 100%; margin-bottom: 1em; margin-left: 0px; margin-right: 0px;"><img src="http://p1.pstatp.com/large/pgc-image/RSQI5jp81TqVsj" alt="淘宝千万Uƈ发分布式架构?4ơ演q? style="height: auto; max-width: 100%; width: auto;" /></figure> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">如用L理、订单、支付、鉴权等功能在多个应用中都存在,那么可以把这些功能的代码单独抽取出来形成一个单独的服务来管理,q样的服务就是所谓的微服务?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">应用和服务之间通过HTTP、TCP或RPCh{多U方式来讉K公共服务Q每个单独的服务都可以由单独的团队来理。此外,可以通过Dubbo、SpringCloud{框架实现服务治理、限、熔断、降U等功能Q提高服务的E_性和可用性?/p> <div ap_container"="" style="text-align: center; width: 862px; height: auto; clear: none;"><iframe width="862" height="200" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true" id="aswift_6" name="aswift_6" style="max-width: 100%; margin: 0px auto; display: block; left: 0px; position: absolute; top: 0px; border-width: 0px; border-style: initial; width: 862px; height: 200px;"></iframe></div> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">不同服务的接口访问方式不同,应用代码需要适配多种讉K方式才能使用服务Q此外,应用讉K服务Q服务之间也可能怺讉KQ调用链会变得非常复杂Q逻辑变得混ؕ?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>W十二次演进Q?/strong><strong>引入企业服务ȝESB屏蔽服务接口的访问差?/strong></p> <figure style="max-width: 100%; margin-bottom: 1em; margin-left: 0px; margin-right: 0px;"><img src="http://p3.pstatp.com/large/pgc-image/RSQI5k1JJ6WBJC" alt="淘宝千万Uƈ发分布式架构?4ơ演q? style="height: auto; max-width: 100%; width: auto;" /></figure> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">通过ESBl一q行讉K协议转换Q应用统一通过ESB来访问后端服务,服务与服务之间也通过ESB来相互调用,以此降低pȝ的耦合E度。这U单个应用拆分ؓ多个应用Q公共服务单独抽取出来来理Qƈ使用企业消息ȝ来解除服务之间耦合问题的架构,是所谓的SOAQ面向服务)架构Q这U架构与微服务架构容易؜淆,因ؓ表现形式十分怼?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">个h理解Q微服务架构更多是指把系l里的公共服务抽取出来单独运l管理的思想Q而SOA架构则是指一U拆分服务ƈ使服务接口访问变得统一的架构思想QSOA架构中包含了微服务的思想?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">业务不断发展Q应用和服务都会不断变多Q应用和服务的部|变得复杂,同一台服务器上部|多个服务还要解册行环境冲H的问题Q此外,对于如大促这c需要动态扩~容的场景,需要水qx展服务的性能Q就需要在新增的服务上准备q行环境Q部|服务等Q运l将变得十分困难?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>W十三次演进Q?/strong><strong>引入容器化技术实现运行环境隔M动态服务管?/strong></p> <figure style="max-width: 100%; margin-bottom: 1em; margin-left: 0px; margin-right: 0px;"><img src="http://p9.pstatp.com/large/pgc-image/RSQI5kDBnIQByQ" alt="淘宝千万Uƈ发分布式架构?4ơ演q? style="height: auto; max-width: 100%; width: auto;" /></figure> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">目前最行的容器化技术是DockerQ最行的容器管理服务是Kubernetes(K8S)Q应?服务可以打包为Docker镜像Q通过K8S来动态分发和部v镜像?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">Docker镜像可理解ؓ一个能q行你的应用/服务的最的操作pȝQ里面放着应用/服务的运行代码,q行环境Ҏ实际的需要设|好。把整个“操作pȝ”打包Z个镜像后Q就可以分发到需要部|相x务的机器上,直接启动Docker镜像可以把服务赯v来,使服务的部v和运l变得简单?/p> <div ap_container"="" style="text-align: center; width: 862px; height: auto; clear: none;"><iframe width="862" height="200" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true" id="aswift_7" name="aswift_7" style="max-width: 100%; margin: 0px auto; display: block; left: 0px; position: absolute; top: 0px; border-width: 0px; border-style: initial; width: 862px; height: 200px;"></iframe></div> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">在大促的之前Q可以在现有的机器集上划分出服务器来启动Docker镜像Q增强服务的性能Q大促过后就可以关闭镜像Q对机器上的其他服务不造成影响Q在3.14节之前,服务q行在新增机器上需要修改系l配|来适配服务Q这会导致机器上其他服务需要的q行环境被破坏)?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">使用容器化技术后服务动态扩~容问题得以解决Q但是机器还是需要公司自w来理Q在非大促的时候,q是需要闲|着大量的机器资源来应对大促Q机器自w成本和q维成本都极高,资源利用率低?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>W十四次演进Q?/strong><strong>以云q_承蝲pȝ</strong></p> <figure style="max-width: 100%; margin-bottom: 1em; margin-left: 0px; margin-right: 0px;"><img src="http://p3.pstatp.com/large/pgc-image/RSQI5kOBZT6v6I" alt="淘宝千万Uƈ发分布式架构?4ơ演q? style="height: auto; max-width: 100%; width: auto;" /></figure> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">pȝ可部|到公有云上Q利用公有云的v量机器资源,解决动态硬件资源的问题Q在大促的时间段里,在云q_中时申h多的资源Q结合Docker和K8S来快速部|服务,在大促结束后释放资源Q真正做到按需付费Q资源利用率<em>大大</em>提高Q同?em>大大</em>降低了运l成本?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">所谓的云^収ͼ是把v量机器资源,通过l一的资源管理,抽象Z个资源整体。在之上可按需动态申L件资源(如CPU、内存、网l等Q,q且之上提供通用的操作系l,提供常用的技术组Ӟ如Hadoop技术栈QMPP数据库等Q供用户使用Q甚x供开发好的应用。用户不需要关pd用内部用了什么技术,p够解决需求(如音视频转码服务、邮件服务、个人博客等Q。在云^C会涉及如下几个概念:</p> <ul style="list-style-type: none; margin: 0px 0px 1em; padding: 0px; line-height: 0px;"> <li style="margin: 0px; padding: 0px 0px 0px 9px; line-height: 28px; zoom: 1; background: url("img/bullet1.png") left 0.9em no-repeat;"><strong>IaaSQ?/strong>基础设施x务。对应于上面所说的机器资源l一源整体,可动态申L件资源的层面Q?/li> <li style="margin: 0px; padding: 0px 0px 0px 9px; line-height: 28px; zoom: 1; background: url("img/bullet1.png") left 0.9em no-repeat;"><strong>PaaSQ?/strong>q_x务。对应于上面所说的提供常用的技术组件方便系l的开发和l护Q?/li> <li style="margin: 0px; padding: 0px 0px 0px 9px; line-height: 28px; zoom: 1; background: url("img/bullet1.png") left 0.9em no-repeat;"><strong>SaaSQ?/strong>软gx务。对应于上面所说的提供开发好的应用或服务Q按功能或性能要求付费?/li> </ul> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">xQ以上所提到的从高ƈ发访问问题,到服务的架构和系l实施的层面都有了各自的解决ҎQ但同时也应该意识到Q在上面的介l中Q其实是有意忽略了诸如跨机房数据同步、分布式事务实现{等的实际问题,q些问题以后有机会再拿出来单独讨论?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>四?架构设计ȝ</strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>架构的调整是否必L照上q演变\径进行?</strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">不是的,以上所说的架构演变序只是针对某个侧面q行单独的改q,在实际场景中Q可能同一旉会有几个问题需要解冻I或者可能先辑ֈ瓉的是另外的方面,q时候就应该按照实际问题实际解决?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">如在<em>政府</em>cȝq发量可能不大,但业务可能很丰富的场景,高ƈ发就不是重点解决的问题,此时优先需要的可能会是丰富需求的解决Ҏ?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>对于要实施的系l,架构应该设计C么程度?</strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">对于单次实施q且性能指标明确的系l,架构设计到能够支持系l的性能指标要求p够了Q但要留有扩展架构的接口以便不备之需。对于不断发展的pȝQ如电商q_Q应设计到能满下一阶段用户量和性能指标要求的程度,q根据业务的增长不断的P代升U架构,以支持更高的q发和更丰富的业务?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>服务端架构和大数据架构有什么区别?</strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">所谓的“大数?#8221;其实是v量数据采集清z{换、数据存储、数据分析、数据服务等场景解决Ҏ的一个统U?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">在每一个场景都包含了多U可选的技术,如数据采集有Flume、Sqoop、Kettle{,数据存储有分布式文gpȝHDFS、FastDFSQNoSQL数据库HBase、MongoDB{,数据分析有Spark技术栈、机器学习算法等?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">ȝ来说大数据架构就是根据业务的需求,整合各种大数据组件组合而成的架构,一般会提供分布式存储、分布式计算、多l分析、数据仓库、机器学习算法等能力。而服务端架构更多指的是应用组l层面的架构Q底层能力往往是由大数据架构来提供?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>有没有一些架构设计的原则Q?/strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>1QN+1设计</strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">pȝ中的每个lg都应做到没有单点故障?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>2Q回滚设?/strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">保pȝ可以向前兼容Q在pȝ升时应能有办法回滚版本?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>3Q禁用设?/strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">应该提供控制具体功能是否可用的配|,在系l出现故障时能够快速下U功能?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>4Q监控设?/strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">在设计阶D就要考虑监控的手Dc?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>5Q多zL据中心设?/strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">若系l需要极高的高可用,应考虑在多地实施数据中心进行多z,臛_在一个机房断늚情况下系l依然可?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>6Q采用成熟的技?/strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">刚开发的或开源的技术往往存在很多隐藏的bugQ出了问题没有商业支持可能会是一个灾难?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>7Q资源隔设?/strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">应避免单一业务占用全部资源?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>8Q架构应能水qx?/strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">pȝ只有做到能水qx展,才能有效避免瓉问题</p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>9Q非核心则购?/strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">非核心功能若需要占用大量的研发资源才能解决Q则考虑购买成熟的品?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>10Q用商用硬?/strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">商用g能有效降低硬件故障的机率?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>11Q快速P?/strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">pȝ应该快速开发小功能模块Q尽快上U进行验证,早日发现问题<em>大大</em>降低pȝ交付的风险?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>12Q无状态设?/strong></p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">服务接口应该做成无状态的Q当前接口的讉K不依赖于接口上次讉K的状态?/p> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;">设计到此l束Q其实,解决Ҏ有很多,但是q个只是我采用的Q觉得最M的一个?/p> <div style="margin-top: 15px; font-style: italic;"> <p style="margin: 0px 0px 1em; padding: 0px; line-height: 35px;"><strong>原创文章Q{载请注明Q?/strong> 转蝲?a href="http://ifeve.com/" style="outline: none; color: #00a19e;">q发~程|?– ifeve.com</a><strong>本文链接地址:</strong> <a href="http://ifeve.com/%e6%b7%98%e5%ae%9d%e5%8d%83%e4%b8%87%e7%ba%a7%e5%b9%b6%e5%8f%91%e5%88%86%e5%b8%83%e5%bc%8f%e6%9e%b6%e6%9e%84%e7%9a%8414%e6%ac%a1%e6%bc%94%e8%bf%9b/" style="outline: none; color: #00a19e;">淘宝千万Uƈ发分布式架构?4ơ演q?/a></p> </div><img src ="http://www.ymeg.top/paulwong/aggbug/434451.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.ymeg.top/paulwong/" target="_blank">paulwong</a> 2019-08-16 10:05 <a href="http://www.ymeg.top/paulwong/archive/2019/08/16/434451.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【原】mysql5.7安装q程记录http://www.ymeg.top/iduido/archive/2019/08/15/434443.htmljava要多思考下java要多思考下Thu, 15 Aug 2019 07:44:00 GMThttp://www.ymeg.top/iduido/archive/2019/08/15/434443.htmlhttp://www.ymeg.top/iduido/comments/434443.htmlhttp://www.ymeg.top/iduido/archive/2019/08/15/434443.html#Feedback0http://www.ymeg.top/iduido/comments/commentRss/434443.htmlhttp://www.ymeg.top/iduido/services/trackbacks/434443.html1、下?br />
    wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

2、查看服务器已安装的版本q卸?br />
    yum repolist enabled | grep "mysql.*-community.*"
    执行后发现安装了8.0
    rpm -qa | grep -i mysql   查看安装了哪?.0的依?br />
    yum remove mysql-community-libs-compat-8.0.12-1.el7.x86_64
    .....
    yum install mysql57-community-release-el7-10.noarch.rpm
3、安?br />    yum install mysql-community-server
4、启动ƈ修改密码
    service mysqld start
   netstat -ntl  查看默认端口3306是否成功启动
   cat /var/log/mysqld.log |grep password   查看默认root密码
   mysql -u root -p
   alter user user() identified by "fdsafdasfdas@1311231sfsa";


]]>
|易云信技术分享:IM中的万h聊技术方案实跉|ȝhttp://www.ymeg.top/jb2011/archive/2019/08/14/434434.htmlJack JiangJack JiangWed, 14 Aug 2019 02:07:00 GMThttp://www.ymeg.top/jb2011/archive/2019/08/14/434434.htmlhttp://www.ymeg.top/jb2011/comments/434434.htmlhttp://www.ymeg.top/jb2011/archive/2019/08/14/434434.html#Feedback0http://www.ymeg.top/jb2011/comments/commentRss/434434.htmlhttp://www.ymeg.top/jb2011/services/trackbacks/434434.html本文来自|易云信团队的技术分享,原创发表于网易云信公众号Q原文链接:mp.weixin.qq.com/s/LT2dASI7QVpcOVxDAsMeVgQ收录时有改动?/p>

1、引a

在不了解IM技术的人眼里,聊是再q_不过的功能而已Q万人群聊?应该也不隑֮现吧Q!

实Q从前端功能界面上来看,聊无非是个@环向员发送消息的一对多聊天消息分发模式而已Q难在何处?

真实的情冉|Q群聊是IMpȝ中的高难度技术点之一。难在哪Q难在服务端Q从某种角度上说Q群聊功能的架构设计和技术实现的品质Q可以代表这ƾIM软g的技术水q?/p>

聊从后台的技术实C_臛_有以下难点:

1Q如何高效地q行大量员消息的分发?

2Q如何高效地理员的在U状态?

3Q如何高效地d员的在U状态?

4Q集系l中Q如何高效地保证员消息的准送达Q?/p>

5Q群聊消息该扩散写还是扩散读Q?/p>

6Q如何保证大量群聊消息分发的情况下不影响单聊消息体验Q?/p>

7Q如何应对大突发事件下的性能负蝲Q?/p>

.... ....

目前Q市面上L的IM产品中,微信是500Z限,QQ是3000Z限(3000人群是按q付费升U,很贵Q不是ؓ一般用户准备的Q。一斚wQ从产品的定义上成员数量不应过多,另一斚wQ技术成本也是个不可回避的因素。万人群q种大规模的技术难度,更是隑ַ惌?/p>

本文内容是网易云信团队ؓ了响应万人群聊功能需求,在设计实C人群聊技术方案中ȝ的技术实践,借此Z分nl各IM开发者同行?/p>

Q本文同步发布于Q?/span>http://www.52im.net/thread-2707-1-1.htmlQ?/span>

学习交流Q?/span>

- x通讯/推送技术开发交?:215477170[推荐]

- Ud端IM开发入门文章:?a href="https://links.jianshu.com/go?to=http%3A%2F%2Fwww.52im.net%2Fthread-464-1-1.html" target="_blank" style="box-sizing: border-box; background-color: transparent; color: #3194d0; text-decoration-line: none; cursor: pointer;">新手入门一就够:从零开发移动端IM?/p>

2、概q?/h1>

随着Ud互联|的发展Q即旉讯服务被广泛应用到各个行业Q客户业务快速发展,传统百h或千Z限的聊已经无法满很多业务发展需求,因此|易云信IM推出万h服务?/p>

万h场景需要解决以下问题:

1Q消息需要按1:9999的比例进行{发投递,按常规消息处理流E将产生大量的子dQ对pȝ吞吐量的要求极高Q?/p>

2Q在微服务系l架构下Q如果不采用一些优化方案,服务以及存储QDB、缓存等Q之间的QPS和网l流量将非常高;

3Q以ؓ单位的缓存(如群成员列表Q内存存储开销较大Q假设一个成?00ByteQ万人群U?MBQ;

4Q群成员d后需要同步群ȝ消息Q智能手ZApp前后台切换生的较多d同步消息协议Q因此需要优化消息同步方案?/p>

Z解决以上问题Q万人群技术方案采用了“聚合+分层/l?增量”的设计思\Q?/span>

3、万人群消息的处理流E?/h1>

1Q?/span>按群l护在线成员信息,主要包含两部分(可以理解Z个缓存集合)Q?/p>

a. 成员在U信息:即用户在U状态变化(上线、下U)Ӟ更新相应的在线状态信息(卛_态维护群有哪些成员在U)Q?/p>

b. 成员IM长连接信息:即用hdӞ更新用户的Link信息Q即d所在Link的地址信息Q消息{发时ҎLink地址路由消息Q?/p>

2Q?/span>IM Server收到消息后Q按ID消息\由到“消息服?#8221;模块Q?/p>

3Q?/span>消息模块检查ƈ预处理消息内容,然后通过“成员在U状?#8221;服务获取在线成员Q完成消息{发的基础工作。ؓ了减群消息模块和群在线成员服务之间的网l流量,采用?#8220;本地~存+增量同步”的缓存策略,x地缓存记录最后更新版本号和时间戳Q每ơ同步群在线成员前先查缓存版本号是否有变_若有则按最后更新时间增量同步;

4Q?/span>通过“成员在U服?#8221;获取在线成员的Link链接信息Q按Link分组路由消息Q分l\q原因Q同一Link上的全部成员只需要\׃条消息即可)。同样ؓ了减网l开销Q成员Link信息也采?#8220;本地~存+增量同步”的方案;

5Q?/span>消息采?#8220;漫游+历史”的存储方案,漫游的消息存储在分布式缓存中Q历史消息异步写入HBase。用L录后可以通过漫游快速的获取到最新消息,q可以通过拉取历史查看更早的消息?/p>

4、万人群Ҏ本地~存增量同步{略

抛开在U状态管理逻辑Q群成员在线状态服务可以简单理解ؓ分布式集中缓存?/p>

增量同步技术方案如下:

如上图所C:

1Q数据缓存是一个集合,其包含了多个~存数据,每一个数据项带有最后更新时间信息;另外~存q有一个严格递增的版本号Q?/p>

2Q缓存数据变_新增、修攏V删除)后,需要增加版本号Q?/p>

3Q本地线E通过~存理d数据Ӟ理服务先检查本地版本号和分布式~存中的版本h否一_若不一致则按本地最新时间戳增量同步新数据项Qƈ更新本地的版本号和最后更新时_Z避免分布式集中缓存中q发写入D的增量时间戳不可靠问题,增量更新时可以将本地记录的最后更新时间戳向前推移Q比如减?0msQ;

4Qؓ避免本地多线Eƈ发读取相同数据项Dq发更新本地~存的问题,可以按缓存数据合q更新请求,卌军_ƈ发问题还可以减少|络开销Q?/p>

5Q缓存数据由大量数据Ҏ成,Z避免单个~存数据太大Q可以将数据中的属性业务场景精Q冷热分)Q低频次d的属性额外缓存?/p>

5、万人群水^扩容Ҏ

万h采用大量本地缓存的Ҏ解决消息处理性能和网l流量的问题Q因此本地存储空间成了方案的瓉炏V因此我们设计了分组路由的技术方案?/p>

消息按群ID和\q略定向\由到指定分组Q集)上处理,分组由多个计节点组成,因此Ҏ上可以做到分l内和分l间的水qx~容?/p>

6、作?#8220;?#8221;服务Q网易云信是如何实现万h所需的计资源的Q?/h1>

׃万h对计算和存储资源消耗比较高Q在实施和运l方案上也有一定的Ҏ性,Z保证业务的可靠性和E_性,|易云信是将万h大群的能力,仅提供给专属的云客户Q普通公有云客户是无法用的Q?/p>

之所以能从Yg基础设施上ؓ万h提供保障,|易云信的IM专有云必d备以下资源能力:

1Q需要专属的独立计算资源Q保持计资源独立,且资源冗余度比公有云高,且需要保证不会受到公有云上其他客户业务的影响Q?/p>

2Q需要专属的独立q维服务Q从而根据客户业务场景制定最佳的业务监控、弹性扩宏V故障迁Uȝq维Ҏ?/p>

MQ万人群聊的实现Q过的技术方案设计和技术实现只是一斚wQ基计算设施资源和运l能力也是不可或~?/p>

所以,从今以后Q不要随随便便就喊万人群聊,甚至十万人群聊,q不是想实现p实现的哦Q?/p>

附录Q更多群聊相x术文?/h1>

?/span>快速裂变:见证微信强大后台架构??的演q历E(一Q?/a>?/span>
?/span>
如何保证IM实时消息?#8220;时序?#8221;?#8220;一致?#8221;Q?/a>?/span>
?/span>
IM单聊和群聊中的在U状态同步应该用“?#8221;q是“?#8221;Q?/a>?/span>
?/span>
IM聊消息如此复杂Q如何保证不丢不重??/span>
?/span>微信后台团队Q微信后台异步消息队列的优化升实践分n?/span>
?/span>Ud端IM中大规模消息的推送如何保证效率、实时性??/span>
?/span>CIMpȝ中聊天消息的同步和存储方案探?/a>?/span>
?/span>
关于IMx通讯聊消息的ؕ序问题讨?/a>?/span>
?/span>
IM聊消息的已d执功能该怎么实现Q?/a>?/span>
?/span>
IM聊消息I竟是存1?x散读)q是存多?x散写)Q?/a>?/span>
?/span>
一套高可用、易伸羃、高q发的IM聊、单聊架构方案设计实?/a>?/span>
?/span>
[技术脑z] 如果?4亿中国h拉到一个微信群里技术上能实现吗Q?/a>?/span>
?/span>
IM聊机制Q除了@环去发消息还有什么方式?如何优化Q?/a>?/span>
?/span>
|易云信技术分享:IM中的万h聊技术方案实跉|ȝ?/span>
>> 更多同类文章 ……

Q本文同步发布于Q?/span>http://www.52im.net/thread-2707-1-1.htmlQ?/span>



Jack Jiang 2019-08-14 10:07 发表评论
]]>Centos7安装Nginx+PHP+MySQLhttp://www.ymeg.top/Alpha/archive/2019/08/13/434429.htmlAlphaAlphaTue, 13 Aug 2019 09:37:00 GMThttp://www.ymeg.top/Alpha/archive/2019/08/13/434429.htmlhttp://www.ymeg.top/Alpha/comments/434429.htmlhttp://www.ymeg.top/Alpha/archive/2019/08/13/434429.html#Feedback0http://www.ymeg.top/Alpha/comments/commentRss/434429.htmlhttp://www.ymeg.top/Alpha/services/trackbacks/434429.html

Alpha 2019-08-13 17:37 发表评论
]]>
重装电脑开发Y件小?/title><link>http://www.ymeg.top/ouyida3/archive/2019/08/10/434411.html</link><dc:creator>ouyida3</dc:creator><author>ouyida3</author><pubDate>Sat, 10 Aug 2019 08:59:00 GMT</pubDate><guid>http://www.ymeg.top/ouyida3/archive/2019/08/10/434411.html</guid><wfw:comment>http://www.ymeg.top/ouyida3/comments/434411.html</wfw:comment><comments>http://www.ymeg.top/ouyida3/archive/2019/08/10/434411.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.ymeg.top/ouyida3/comments/commentRss/434411.html</wfw:commentRss><trackback:ping>http://www.ymeg.top/ouyida3/services/trackbacks/434411.html</trackback:ping><description><![CDATA[<span style="font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;">## ssh</span><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;">- 用惯secure crtQ要乎ͼ华军软g|很多说8.5版本行的都是不行的,最后在csdn弄了?.1版本?/span><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;">  - 官网最新好像也?.5</span><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;">  - 不要找什么注册码Q破解都是注册机了现在。支持正版还是用putty?/span><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;">- 同类q有xshellQ也要买</span><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;">- 免费的有puttyQ不能记住用户名密码Q不能多H口。有个multiputty.exeQ不敢装?/span><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;">  - 其他都可以:记录ipQ设|好字体和编码,基本可以用?/span><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;">- 注意Qcrt原来ssh也可以记录密码的Q?/span><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;">## git</span><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;">- 官网下蝲?.22.0版本?/span><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;">- git clone报错 fatal: protocol '?https' is not supported</span><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;">- ?https://www.cnblogs.com/ouyida3/p/11331538.html</span><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;">## notepad++</span><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><br />讄主题<br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;">## IntelliJ</span><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;">- 自己写一个开源YӞ3个月以上可以免费甌注册?/span><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><br /><div>C:/Program Files/JetBrains/IntelliJ IDEA 2019.2/plugins/maven/lib/maven3<br /><br /><div><mirror>  </div><div>      <id>CN</id>  </div><div>      <name>OSChina Central</name>                                                                                                                         </div><div>      <url>http://maven.oschina.net/content/groups/public/</url>  </div><div>      <mirrorOf>central</mirrorOf>  </div><div>    </mirror></div></div><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;">- 官网下了7.7.1</span><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><br style="overflow-wrap: break-word; font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;" /><span style="font-family: "sans serif", tahoma, verdana, helvetica; font-size: 16px;">2019.8.10</span><img src ="http://www.ymeg.top/ouyida3/aggbug/434411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.ymeg.top/ouyida3/" target="_blank">ouyida3</a> 2019-08-10 16:59 <a href="http://www.ymeg.top/ouyida3/archive/2019/08/10/434411.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一文读懂即旉讯应用中的|络心蟩包机Ӟ作用、原理、实现思\{?/title><link>http://www.ymeg.top/jb2011/archive/2019/08/08/434394.html</link><dc:creator>Jack Jiang</dc:creator><author>Jack Jiang</author><pubDate>Thu, 08 Aug 2019 04:01:00 GMT</pubDate><guid>http://www.ymeg.top/jb2011/archive/2019/08/08/434394.html</guid><wfw:comment>http://www.ymeg.top/jb2011/comments/434394.html</wfw:comment><comments>http://www.ymeg.top/jb2011/archive/2019/08/08/434394.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.ymeg.top/jb2011/comments/commentRss/434394.html</wfw:commentRss><trackback:ping>http://www.ymeg.top/jb2011/services/trackbacks/434394.html</trackback:ping><description><![CDATA[     摘要: 本文原文׃?#8220;张小?#8221;原创发布?#8220;高性能服务器开?#8221;微信公众P原题《心跛_机制设计详解》,x通讯|收录时有改动?、引a一般来_没有真正动手做过|络通信应用的开发者,很难惌x通讯应用中的心蟩机制的作用。但不可否认Q作为即旉讯应用Q心x制是其网l通信技术底层中非常重要的一环,有没有心x制、心x制的法实现好坏Q都直接媄响即旉讯?..  <a href='http://www.ymeg.top/jb2011/archive/2019/08/08/434394.html'>阅读全文</a><img src ="http://www.ymeg.top/jb2011/aggbug/434394.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.ymeg.top/jb2011/" target="_blank">Jack Jiang</a> 2019-08-08 12:01 <a href="http://www.ymeg.top/jb2011/archive/2019/08/08/434394.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【原】Centos虚拟机安装与讄要点http://www.ymeg.top/iduido/archive/2019/08/05/434362.htmljava要多思考下java要多思考下Mon, 05 Aug 2019 07:56:00 GMThttp://www.ymeg.top/iduido/archive/2019/08/05/434362.html1、设|?|络适配?-自定义:特定虚拟|络QVMNET8(NAT)模式Q?br />
2、编?虚拟|络~辑?VMNET8
        (NAT模式Q?-NAT讄Q网关IPQ设|ؓ本机ipconfig/all所昄的网关ip所在网D늚某个ipQ?br />        如:ipconfig/all昄Q?/div>
   IPv4 地址 . . . . . . . . . . . . : 10.10.10.12(首?
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认|关. . . . . . . . . . . . . : 10.10.10.1
   DNS 服务?nbsp; . . . . . . . . . . . : 10.10.10.1
      则设|ؓQ?br />                10.10.10.122?0.10.10.133......
      同时Q子|IP写ؓQ?0.10.10.0   子网掩码Q?55.255.255.0

3、vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=ef96c2f5-354a-4a17-a1ea-e0cee6397619
DEVICE=ens33
ONBOOT=yes
IPADDR=10.10.10.132
NETMASK=255.255.255.0
GATEWAY=10.10.10.122
DNS=10.10.10.1

4、service network restart

5、ping baidu.com  通过
6、安装更新必要的?br />yum update
yum install lrzsz zip unzip telnet
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install nginx
yum install git

7、安装bitcoinE序
git clone https://github.com/bitcoin/bitcoin.git
cd bitcoin
git tag
git checkout v0.18.0
./autogen.sh
yum install -y boost-devel qt-devel protobuf-devel qrencode-devel libevent-devel libtool openssl-devel libdb-devel
./configure  (q里可能会失败)
wget http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz
tar xf db-4.8.30.NC.tar.gz
cd db-4.8.30.NC/build_unix
 ../dist/configure --enable-cxx --disable-shared --with-pic --prefix=/home/download/bitcoin/db4/
make 
make install
cd bitcoin
./configure LDFLAGS="-L/home/download/bitcoin/db4/lib/" CPPFLAGS="-I/home/download/bitcoin/db4/include/"
make
make install


bitcoind -datadir=/home/data/btc -conf=bitcoin.conf  -daemon
tail -f /home/data/btc/debug.log



]]>
可能会搞怽的面试:你知道一个TCPq接上能发v多少个HTTPh吗?http://www.ymeg.top/jb2011/archive/2019/08/02/434332.htmlJack JiangJack JiangFri, 02 Aug 2019 01:55:00 GMThttp://www.ymeg.top/jb2011/archive/2019/08/02/434332.htmlhttp://www.ymeg.top/jb2011/comments/434332.htmlhttp://www.ymeg.top/jb2011/archive/2019/08/02/434332.html#Feedback0http://www.ymeg.top/jb2011/comments/commentRss/434332.htmlhttp://www.ymeg.top/jb2011/services/trackbacks/434332.html阅读全文

Jack Jiang 2019-08-02 09:55 发表评论
]]>
Guide to the Most Important JVM Parametershttp://www.ymeg.top/paulwong/archive/2019/08/01/434330.htmlpaulwongpaulwongThu, 01 Aug 2019 08:55:00 GMThttp://www.ymeg.top/paulwong/archive/2019/08/01/434330.htmlhttp://www.ymeg.top/paulwong/comments/434330.htmlhttp://www.ymeg.top/paulwong/archive/2019/08/01/434330.html#Feedback0http://www.ymeg.top/paulwong/comments/commentRss/434330.htmlhttp://www.ymeg.top/paulwong/services/trackbacks/434330.htmlhttps://www.baeldung.com/jvm-parametersa

Optimising Your Minecraft: Jvm Arguments
https://xealgaming.net/threads/optimising-your-minecraft-jvm-arguments.4758/


paulwong 2019-08-01 16:55 发表评论
]]>
JVM内存配置http://www.ymeg.top/paulwong/archive/2019/08/01/434329.htmlpaulwongpaulwongThu, 01 Aug 2019 08:44:00 GMThttp://www.ymeg.top/paulwong/archive/2019/08/01/434329.htmlhttp://www.ymeg.top/paulwong/comments/434329.htmlhttp://www.ymeg.top/paulwong/archive/2019/08/01/434329.html#Feedback0http://www.ymeg.top/paulwong/comments/commentRss/434329.htmlhttp://www.ymeg.top/paulwong/services/trackbacks/434329.htmlJVM内存主要分ؓ两个部分Q分别是PermanentSapce和HeapSpace?/p>

PermantSpace主要负责存放加蝲?a href="http://whatis.ctocio.com.cn/searchwhatis/213/5947213.shtml" style="color: #075db3;">Classcȝ对象如class本nQ?a href="http://whatis.ctocio.com.cn/searchwhatis/229/5948729.shtml" style="color: #075db3;">methodQfield{反对象,一般不用配|?/p>

JVM的Heap区可以通过-X参数来设定。HeapSpace= {Old + NEW {= Eden , from, to } }

当一个URL被访问时Q内存申误E如下:

  1. JVM会试图ؓ相关Java对象在Eden中初始化一块内存区?nbsp;
  2. 当EdenI间_Ӟ内存甌l束。否则到下一?nbsp;
  3. JVM试图释放在Eden中所有不z跃的对象(q属?或更高的垃圑֛Ӟ, 释放后若EdenI间仍然不以放入新对象Q则试图部分Eden中活跃对象放入Survivor?/li>
  4.  Survivor用来作ؓEden及OLD的中间交换区域,当OLD区空间够时QSurvivor区的对象会被UdOld区,否则会被保留在Survivor?nbsp;
  5. 当OLD区空间不够时QJVM会在OLD行完全的垃圾攉Q?U) 
  6. 完全垃圾攉后,若Survivor及OLDZ然无法存放从Eden复制q来的部分对象,DJVM无法在EdenZؓ新对象创建内存区域,则出?#8221;out of memory错误”

Xms/XmxQ定义NEW+OLDD늚d寸,ms为JVM启动时NEW+OLD的内存大;mx为最大可占用的NEW+OLD内存大小。。在用户生环境上一般将q两个D为相同,以减运行期间系l在内存甌上所q开销Q?nbsp;

NewSize/MaxNewSizeQ定义单独NEWD늚寸QNewSize为JVM启动时NEW的内存大;MaxNewSize为最大可占用的NEW的内存大。在用户生环境上一般将q两个D为相同,以减运行期间系l在内存甌上所q开销Q?/span>

Xms/Xmx和NewSize/MaxNewSize定义好后QOLD区间也自然定义完毕了Q即OLD区初始大?QXms-NewSizeQ,OLD区最大可占用大小=QXmx-MaxNewSizeQ; 

PermSize/MaxPermSizeQ定义PermD늚寸QPermSize为JVM启动时Perm的内存大;MaxPermSize为最大可占用的Perm内存大小。在用户生环境上一般将q两个D为相同,以减运行期间系l在内存甌上所q开销?/span>



paulwong 2019-08-01 16:44 发表评论
]]>
使用 Awaitility 试异步代码http://www.ymeg.top/paulwong/archive/2019/08/01/434327.htmlpaulwongpaulwongThu, 01 Aug 2019 02:06:00 GMThttp://www.ymeg.top/paulwong/archive/2019/08/01/434327.htmlhttp://www.ymeg.top/paulwong/comments/434327.htmlhttp://www.ymeg.top/paulwong/archive/2019/08/01/434327.html#Feedback0http://www.ymeg.top/paulwong/comments/commentRss/434327.htmlhttp://www.ymeg.top/paulwong/services/trackbacks/434327.html自动化工?异步校验工具 awaitility 快速入?/div>https://testerhome.com/topics/7408


https://yanbin.blog/test-asyn-call-with-awaitility/

Introduction to Awaitlity
https://www.baeldung.com/awaitlity-testing






paulwong 2019-08-01 10:06 发表评论
]]>
Spring Batch JUnit test for multiple jobshttp://www.ymeg.top/paulwong/archive/2019/07/31/434326.htmlpaulwongpaulwongWed, 31 Jul 2019 02:48:00 GMThttp://www.ymeg.top/paulwong/archive/2019/07/31/434326.htmlhttp://www.ymeg.top/paulwong/comments/434326.htmlhttp://www.ymeg.top/paulwong/archive/2019/07/31/434326.html#Feedback0http://www.ymeg.top/paulwong/comments/commentRss/434326.htmlhttp://www.ymeg.top/paulwong/services/trackbacks/434326.htmlhttps://stackoverflow.com/questions/34217101/spring-batch-junit-test-for-multiple-jobs

@Configuration
public class TestBatchConfiguration implements MergedBeanDefinitionPostProcessor {

    @Autowired
    @Qualifier("JobA")
    private Job job;

    @Bean(name="jtestl")
    public JobLauncherTestUtils jobLauncherTestUtils() {
        JobLauncherTestUtils jobLauncherTestUtils = new JobLauncherTestUtils();
        jobLauncherTestUtils.setJob(job);
        return jobLauncherTestUtils;
    }

    /**
     * 
https://stackoverflow.com/questions/22416140/autowire-setter-override-with-java-config
     * This is needed to inject the correct job into JobLauncherTestUtils
     
*/
    @Override
    public void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName) {
        if(beanName.equals("jtestl")) {
            beanDefinition.getPropertyValues().add("job", getMyBeanFirstAImpl());
        }
    }

    private Object getMyBeanFirstAImpl() {
        return job;
    }

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }
}


paulwong 2019-07-31 10:48 发表评论
]]>
Keep SSH session alivehttp://www.ymeg.top/paulwong/archive/2019/07/30/434321.htmlpaulwongpaulwongTue, 30 Jul 2019 05:46:00 GMThttp://www.ymeg.top/paulwong/archive/2019/07/30/434321.htmlhttp://www.ymeg.top/paulwong/comments/434321.htmlhttp://www.ymeg.top/paulwong/archive/2019/07/30/434321.html#Feedback0http://www.ymeg.top/paulwong/comments/commentRss/434321.htmlhttp://www.ymeg.top/paulwong/services/trackbacks/434321.htmlsshd (the server) closes the connection if it doesn't hear anything from the client for a while. You can tell your client to send a sign-of-life signal to the server once in a while.

The configuration for this is in the file "~/.ssh/config", create it if the configuration file does not exist. To send the signal every four minutes (240 seconds) to the remote host, put the following in your "~/.ssh/config" file.

Host remotehost:     HostName remotehost.com     ServerAliveInterval 240 

This is what I have in my "~/.ssh/config":

To enable it for all hosts use:

Host * ServerAliveInterval 240 

Also make sure to run:

chmod 600 ~/.ssh/config 

because the config file must not be world-readable.



paulwong 2019-07-30 13:46 发表评论
]]>
癑ֺAPPUd端网l深度优化实践分??Q移动端q优化?/title><link>http://www.ymeg.top/jb2011/archive/2019/07/29/434316.html</link><dc:creator>Jack Jiang</dc:creator><author>Jack Jiang</author><pubDate>Mon, 29 Jul 2019 02:29:00 GMT</pubDate><guid>http://www.ymeg.top/jb2011/archive/2019/07/29/434316.html</guid><wfw:comment>http://www.ymeg.top/jb2011/comments/434316.html</wfw:comment><comments>http://www.ymeg.top/jb2011/archive/2019/07/29/434316.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.ymeg.top/jb2011/comments/commentRss/434316.html</wfw:commentRss><trackback:ping>http://www.ymeg.top/jb2011/services/trackbacks/434316.html</trackback:ping><description><![CDATA[     摘要: 本文q度技术团?#8220;蔡锐”原创发表?#8220;癑ֺApp技?#8221;公众P原题为《百度App|络深度优化pd《三》弱|优化》,感谢原作者的无私分n。一、前a|络优化解决的核心问题有三个Q第一是安全问题,我们在《百度APPUd端网l深度优化实践分?一)QDNS优化》进行了详细的讲解。第二是速度问题Q我们在《百度APPUd端网l深度优化实践分??Q网l连接优...  <a href='http://www.ymeg.top/jb2011/archive/2019/07/29/434316.html'>阅读全文</a><img src ="http://www.ymeg.top/jb2011/aggbug/434316.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.ymeg.top/jb2011/" target="_blank">Jack Jiang</a> 2019-07-29 10:29 <a href="http://www.ymeg.top/jb2011/archive/2019/07/29/434316.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>publish over ssh 实现 Jenkins q程部vhttp://www.ymeg.top/paulwong/archive/2019/07/25/434296.htmlpaulwongpaulwongThu, 25 Jul 2019 01:33:00 GMThttp://www.ymeg.top/paulwong/archive/2019/07/25/434296.htmlhttp://www.ymeg.top/paulwong/comments/434296.htmlhttp://www.ymeg.top/paulwong/archive/2019/07/25/434296.html#Feedback0http://www.ymeg.top/paulwong/comments/commentRss/434296.htmlhttp://www.ymeg.top/paulwong/services/trackbacks/434296.htmlJenkinsq程部vQ一开始没有Q何头l,想了很多Ҏ. 因ؓ两台机器都是windowspȝQ所以想到publish over cifs, 但是q个|上资料太少Q貌似只能内|用。又惛_了Jenkins 分布式构建,但是Jenkins构徏的代码和产物最后自动拷贝到主节炏V而远E机器其实是客户方的机器Q所以这个分布式构徏q不适用。最后还是选定publish over ssh来实现远E部|Ӏ?nbsp;

h意:在进行远E部|操作前Q先要确保客h能ssh d到远E机器。如果不知道SSH怎么登陆Q请参考http://blog.csdn.net/flyingshuai/article/details/72897692 
1. 安装publish over ssh 插gQ安装很单,在此不表?nbsp;
2. 在Jenkinspȝ讄里找到Publish over SSH模块 
3. 用户?密码方式d的,pȝ讄里设|如下: 
4. 如果是证书登录的Q系l设|里讄如下Q?nbsp;
5. Job讄Q点d加构建后操作步骤Q选择send build artifacts over ssh, 讄如下Q?nbsp;
6. 文g上传到远E服务器后,q有一些后l操作,比如Q替换数据库配置文g。可以把bat命o写到一个批处理文g中,存到服务器上。Exec command填写批处理文件的l对路径。如上图所C?/div>
关于bat脚本Q?nbsp;
如果每次都需要替换同L文gQ用copy /y 是无条g覆盖Q不会询问。而xcopy可以实现扚w拯文g和文件夹。如果文件较多可用此命o 
注意脚本q行p|Q构Z会显C色成功图标,所以一定要打开控制台输出,看是否真的成功?/div>
--------------------- 
作者:flyingshuai 
来源QCSDN 
原文Q?a href="https://blog.csdn.net/flyingshuai/article/details/72898665 " target="_blank">https://blog.csdn.net/flyingshuai/article/details/72898665 
版权声明Q本文ؓ博主原创文章Q{载请附上博文链接Q?/div>

paulwong 2019-07-25 09:33 发表评论
]]>从游击队到正规军Q马蜂窝旅游|的IMpȝ架构演进之\http://www.ymeg.top/jb2011/archive/2019/07/24/434292.htmlJack JiangJack JiangWed, 24 Jul 2019 13:44:00 GMThttp://www.ymeg.top/jb2011/archive/2019/07/24/434292.htmlhttp://www.ymeg.top/jb2011/comments/434292.htmlhttp://www.ymeg.top/jb2011/archive/2019/07/24/434292.html#Feedback0http://www.ymeg.top/jb2011/comments/commentRss/434292.htmlhttp://www.ymeg.top/jb2011/services/trackbacks/434292.html阅读全文

Jack Jiang 2019-07-24 21:44 发表评论
]]>
How do I clear my Jenkins/Hudson build history?http://www.ymeg.top/paulwong/archive/2019/07/24/434289.htmlpaulwongpaulwongWed, 24 Jul 2019 08:18:00 GMThttp://www.ymeg.top/paulwong/archive/2019/07/24/434289.htmlhttp://www.ymeg.top/paulwong/comments/434289.htmlhttp://www.ymeg.top/paulwong/archive/2019/07/24/434289.html#Feedback0http://www.ymeg.top/paulwong/comments/commentRss/434289.htmlhttp://www.ymeg.top/paulwong/services/trackbacks/434289.html阅读全文

paulwong 2019-07-24 16:18 发表评论
]]>
Springboot ActiveMQ jmsTemplate配置http://www.ymeg.top/paulwong/archive/2019/07/24/434287.htmlpaulwongpaulwongWed, 24 Jul 2019 03:40:00 GMThttp://www.ymeg.top/paulwong/archive/2019/07/24/434287.htmlhttp://www.ymeg.top/paulwong/comments/434287.htmlhttp://www.ymeg.top/paulwong/archive/2019/07/24/434287.html#Feedback0http://www.ymeg.top/paulwong/comments/commentRss/434287.htmlhttp://www.ymeg.top/paulwong/services/trackbacks/434287.html@Configuration
@DependsOn(value="cachingConnectionFactory")
public class JmsTemplateConfiguration {

@Value("${wechat.sendmessage.queue}")
private String queueName;

@Value("${wechat.sendmessage.topic}")
private String topicName;

@Value("${spring.jms.pub-sub-domain}")
private boolean isPubSubDomain;


/**
 * 定义点对炚w?br /> * 
@return
 
*/
@Bean
public Queue queue() {
    return new ActiveMQQueue(queueName);
}



/**
 * 定义一个主?br /> * 
@return
 
*/
@Bean
public Topic topic() {
    return new ActiveMQTopic(topicName);
}

private final ObjectProvider<DestinationResolver> destinationResolver;
private final ObjectProvider<MessageConverter> messageConverter;
private final CachingConnectionFactory cachingConnectionFactory;

@Autowired
public JmsTemplateConfiguration(ObjectProvider<DestinationResolver> destinationResolver,
                                ObjectProvider<MessageConverter> messageConverter,
                                CachingConnectionFactory cachingConnectionFactory) {
    this.destinationResolver = destinationResolver;
    this.messageConverter = messageConverter;
    this.cachingConnectionFactory = cachingConnectionFactory;
}

/**
 * 配置队列生者的JmsTemplate
 * 
@return JmsTemplate
 
*/
@Bean(name="jmsQueueTemplate")
public JmsTemplate jmsQueueTemplate() {
    //讄创徏q接的工?br />    //JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
    
//优化q接工厂Q这里应用缓存池 q接工厂即?/span>
    JmsTemplate jmsTemplate = new JmsTemplate(cachingConnectionFactory);
    //讄默认消费topic
   
//jmsTemplate.setDefaultDestination(topic());
    
//讄P2P队列消息cd
    jmsTemplate.setPubSubDomain(isPubSubDomain);

    DestinationResolver destinationResolver = (DestinationResolver) this.destinationResolver.getIfUnique();
    if (destinationResolver != null) {
        jmsTemplate.setDestinationResolver(destinationResolver);
    }
    MessageConverter messageConverter = (MessageConverter) this.messageConverter.getIfUnique();
    if (messageConverter != null) {
        jmsTemplate.setMessageConverter(messageConverter);
    }
    //deliveryMode, priority, timeToLive 的开养I要生效,必须配置为trueQ默认false
    jmsTemplate.setExplicitQosEnabled(true);
    //DeliveryMode.NON_PERSISTENT=1:非持?nbsp;; DeliveryMode.PERSISTENT=2:持久
    
//定义持久化后节点挂掉以后Q重启可以l消?
    jmsTemplate.setDeliveryMode(DeliveryMode.PERSISTENT);
    //默认不开启事?/span>
    System.out.println("默认是否开启事务:"+jmsTemplate.isSessionTransacted());
    //如果不启用事务,则会DXA事务失效Q?br />    //作ؓ生者如果需要支持事务,则需要配|SessionTransacted为true
  
//jmsTemplate.setSessionTransacted(true);
    
//消息的应{方式,需要手动确认,此时SessionTransacted必须被设|ؓfalseQ且为Session.CLIENT_ACKNOWLEDGE模式
    
//Session.AUTO_ACKNOWLEDGE  消息自动{收
    
//Session.CLIENT_ACKNOWLEDGE  客户端调用acknowledgeҎ手动{收
    
//Session.DUPS_OK_ACKNOWLEDGE 不必必须{收Q消息可能会重复发?/span>
    jmsTemplate.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
    return jmsTemplate;
}

/**
 * 配置发布订阅生者的JmsTemplate
 * 
@return JmsTemplate
 
*/
@Bean(name="jmsTopicTemplate")
public JmsTemplate jmsTopicTemplate() {
    //讄创徏q接的工?br />   //JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
    
//优化q接工厂Q这里应用缓存池 q接工厂即?/span>
    JmsTemplate jmsTemplate = new JmsTemplate(cachingConnectionFactory);
    //讄默认消费topic
  
//jmsTemplate.setDefaultDestination(topic());
    
//讄发布订阅消息cd
    jmsTemplate.setPubSubDomain(isPubSubDomain);


    //deliveryMode, priority, timeToLive 的开养I要生效,必须配置为trueQ默认false
    jmsTemplate.setExplicitQosEnabled(true);
    //DeliveryMode.NON_PERSISTENT=1:非持?nbsp;; DeliveryMode.PERSISTENT=2:持久
    jmsTemplate.setDeliveryMode(DeliveryMode.PERSISTENT);

    //默认不开启事?/span>
    System.out.println("是否开启事?+jmsTemplate.isSessionTransacted());
    //如果session带有事务Qƈ且事务成功提交,则消息被自动{收。如果事务回滚,则消息会被再ơ传送?br />    //jmsTemplate.setSessionTransacted(true);

    
//不带事务的session的签收方式,取决于session的配|?br />    //默认消息认方式?Q即AUTO_ACKNOWLEDGE
    System.out.println("是否消息认方式"+jmsTemplate.getSessionAcknowledgeMode());

    //消息的应{方式,需要手动确认,此时SessionTransacted必须被设|ؓfalseQ且为Session.CLIENT_ACKNOWLEDGE模式
    
//Session.AUTO_ACKNOWLEDGE  消息自动{收
    
//Session.CLIENT_ACKNOWLEDGE  客户端调用acknowledgeҎ手动{收
    
//Session.DUPS_OK_ACKNOWLEDGE 不必必须{收Q消息可能会重复发?/span>
    jmsTemplate.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);

    return jmsTemplate;
}

}


paulwong 2019-07-24 11:40 发表评论
]]>自已开发IM有那么难吗?手把手教你自怸个Andriod版简易IM (有源?http://www.ymeg.top/jb2011/archive/2019/07/22/434271.htmlJack JiangJack JiangMon, 22 Jul 2019 04:48:00 GMThttp://www.ymeg.top/jb2011/archive/2019/07/22/434271.htmlhttp://www.ymeg.top/jb2011/comments/434271.htmlhttp://www.ymeg.top/jb2011/archive/2019/07/22/434271.html#Feedback0http://www.ymeg.top/jb2011/comments/commentRss/434271.htmlhttp://www.ymeg.top/jb2011/services/trackbacks/434271.html阅读全文

Jack Jiang 2019-07-22 12:48 发表评论
]]>
׼ƽФ
    <nobr id="rub96"><optgroup id="rub96"></optgroup></nobr>

    <bdo id="rub96"></bdo>

      1. <track id="rub96"><div id="rub96"></div></track>
        <nobr id="rub96"><optgroup id="rub96"></optgroup></nobr>

            <nobr id="rub96"><address id="rub96"><big id="rub96"></big></address></nobr>
          1. <menuitem id="rub96"><strong id="rub96"><menu id="rub96"></menu></strong></menuitem>
            <dl id="rub96"><source id="rub96"><tr id="rub96"></tr></source></dl>
            1. <tbody id="rub96"><div id="rub96"></div></tbody>
              1. <bdo id="rub96"><optgroup id="rub96"></optgroup></bdo>
              2. <bdo id="rub96"><dfn id="rub96"><dd id="rub96"></dd></dfn></bdo>
                1. <option id="rub96"><source id="rub96"></source></option>
                2. <bdo id="rub96"></bdo>

                    <p id="rub96"><tr id="rub96"></tr></p>
                  1. <tbody id="rub96"></tbody>

                    <bdo id="rub96"></bdo>

                  2. <option id="rub96"><source id="rub96"></source></option>

                    <bdo id="rub96"><optgroup id="rub96"><dd id="rub96"></dd></optgroup></bdo>
                      <track id="rub96"></track>

                        <bdo id="rub96"></bdo>
                      1. <option id="rub96"><p id="rub96"><tr id="rub96"></tr></p></option>

                          <bdo id="rub96"></bdo>
                          1. <track id="rub96"></track>
                            1. <track id="rub96"></track>
                                  <bdo id="rub96"></bdo>
                                  <option id="rub96"></option>

                                      1. <track id="rub96"><span id="rub96"></span></track>

                                          <option id="rub96"></option>

                                          1. 
                                            
                                              <option id="rub96"><span id="rub96"></span></option>
                                              <bdo id="rub96"><address id="rub96"></address></bdo>
                                              <option id="rub96"><source id="rub96"></source></option>
                                                <nobr id="rub96"><address id="rub96"></address></nobr>
                                              1. <nobr id="rub96"><optgroup id="rub96"><big id="rub96"></big></optgroup></nobr>
                                                <track id="rub96"></track>

                                                <nobr id="rub96"><optgroup id="rub96"></optgroup></nobr>
                                                  <nobr id="rub96"><optgroup id="rub96"></optgroup></nobr>

                                                  <bdo id="rub96"></bdo>

                                                    1. <track id="rub96"><div id="rub96"></div></track>
                                                      <nobr id="rub96"><optgroup id="rub96"></optgroup></nobr>

                                                          <nobr id="rub96"><address id="rub96"><big id="rub96"></big></address></nobr>
                                                        1. <menuitem id="rub96"><strong id="rub96"><menu id="rub96"></menu></strong></menuitem>
                                                          <dl id="rub96"><source id="rub96"><tr id="rub96"></tr></source></dl>
                                                          1. <tbody id="rub96"><div id="rub96"></div></tbody>
                                                            1. <bdo id="rub96"><optgroup id="rub96"></optgroup></bdo>
                                                            2. <bdo id="rub96"><dfn id="rub96"><dd id="rub96"></dd></dfn></bdo>
                                                              1. <option id="rub96"><source id="rub96"></source></option>
                                                              2. <bdo id="rub96"></bdo>

                                                                  <p id="rub96"><tr id="rub96"></tr></p>
                                                                1. <tbody id="rub96"></tbody>

                                                                  <bdo id="rub96"></bdo>

                                                                2. <option id="rub96"><source id="rub96"></source></option>

                                                                  <bdo id="rub96"><optgroup id="rub96"><dd id="rub96"></dd></optgroup></bdo>
                                                                    <track id="rub96"></track>

                                                                      <bdo id="rub96"></bdo>
                                                                    1. <option id="rub96"><p id="rub96"><tr id="rub96"></tr></p></option>

                                                                        <bdo id="rub96"></bdo>
                                                                        1. <track id="rub96"></track>
                                                                          1. <track id="rub96"></track>
                                                                                <bdo id="rub96"></bdo>
                                                                                <option id="rub96"></option>

                                                                                    1. <track id="rub96"><span id="rub96"></span></track>

                                                                                        <option id="rub96"></option>

                                                                                        1. 
                                                                                          
                                                                                            <option id="rub96"><span id="rub96"></span></option>
                                                                                            <bdo id="rub96"><address id="rub96"></address></bdo>
                                                                                            <option id="rub96"><source id="rub96"></source></option>
                                                                                              <nobr id="rub96"><address id="rub96"></address></nobr>
                                                                                            1. <nobr id="rub96"><optgroup id="rub96"><big id="rub96"></big></optgroup></nobr>
                                                                                              <track id="rub96"></track>

                                                                                              <nobr id="rub96"><optgroup id="rub96"></optgroup></nobr>
                                                                                              1. ȫ3app ݿ appƼ ܼſ ֲʿѯ Ϻ3 724 Ŀ 㶫ʮֿ½ 㶫ʱʱ11ѡ 115ͼ 12淨뽱 pk pk10빫ʽ տƻҳ ƽڹʽ