大量的连接选项为容器间通信打开了更为广泛的

2019-08-23 作者:小鱼儿玄机30码   |   浏览(115)

亿级 Web 系统的容错性建设实践

三年多前,我在腾讯负责的活动运营系统,因为业务流量规模的数倍增长,系统出现了各种各样的异常,当时,作为开发的我,7*24小时地没日没夜处理告警,周末和凌晨也经常上线,疲于奔命。后来,当时的老领导对我说:你不能总扮演一个“救火队长”的角色, 要尝试从系统整体层面思考产生问题的根本原因,然后推进解决。我幡然醒悟,“火”是永远救不完的,让系统能够自动”灭火”,才是解决问题的正确方向。简而言之,系统的异常不能总是依赖于“人”去恢复,让系统本身具备“容错”能力,才是根本解决之道。三年多过去了,我仍然负责着这个系统,而它也已经从一个日请求百万级的小Web系统,逐步成长为一个高峰日请求达到8亿规模的平台级系统,走过一段令人难忘的技术历程。

容错其实是系统健壮性的重要指标之一,而本文会主要聚焦于“容错”能力的实践,希望对做技术的同学有所启发和帮助。

(备注:QQ会员活动运营平台,后面统一简称AMS) 

小鱼儿玄机30码 1

在命令行输入python;再输入import caffe时,可能会报以下错误:can not find module skimage.io,caffeskimage.io

在命令行输入**python;再输入**import caffe**时,可能会报以下错误:

can not find module skimage.io

此时只要按照以下命令操作即可:
$ sudo apt-get install python-numpy python-scipy python-matplotlib python-sklearn python-skimage python-h5py python-protobuf python-leveldb python-networkx python-nose python-pandas python-gflags Cython ipython

$ sudoapt-get update

在caffe-master目录下:
$ make pycaffe
然后在命令行输入**python;再输入**import caffe**就可以成功啦。 

caffe时,可能会报以下错误:can not find module skimage.io,caffeskimage.io 在命令行输入 python ; 再输入 import caffe 时...

搭建ssr服务器,搭建ssr

搭建ssr服务器

首先,先说一下,为什么这么久没写博客。

一方面,最近在搭建自己的服务器。挺忙的。

另一方面,写了许多有关服务器构建,网站构建的word。但没有润色,所以打算等自己服务器做好了整理一下再发。

 

不过今天,我先来写一个编程人员都要用到的东西--SSR

程序员总是有着许多东西要从外网下载,从外网论坛查资料。但是,经常网速不给力,甚至无法访问。

所以只好各种找qiang的方法。过往不谈了(默默看看我家的水表)。

小鱼儿玄机30码,现在很多人都在用SSR,只要下载一个免费的软件,再找一个账号就OK了。

然而这个账号啊。免费的往往经常卡,或者挂了。收费的往往过不了一阵子就莫名消失了,然后服务器挂了。。。(不要问我怎么这么了解,我只想说我再也不办年费了。说多了都是泪。。。)

好在,我还认识了一个人很好的群主。他不仅提供我们很好的账号资源,还给了相关的建服务器的教程。

 

当然,时至今日,经过无数大神前辈的努力,建立SSR服务器是很简单的一件事情。网上有着许多的相关教程。

参考资料:

上面这位大佬已经写得比较清楚了。我就不在这里CP一份了。

我只做一些额外的补充。

 

 

首先,我也分为三步,来对应补充:

第一,购买服务器:

大佬推荐的是vultr。

相关的国外服务器提供商还有:

MASS:

IOZOOM:

FREELANCER:

当然,还有搬瓦工。。。。

等等。

现在主流的都是$5/month,bandwidth:1000GB。大家购买时可以参考一下这个行情。

当然大佬推荐的vultr,有$2.5/month,bandwidth:500GB的服务。(只不过不是每时每刻都有货,如果非常想要,又没有,就多等一会儿,刷新一下。)

当然这几天,还有一个cloudcone有一个限时优惠套餐。5折,15刀一年。详见: (还有一些其他的优惠,自己看吧)

 

大佬在文章中说,不要选择日本的节点,经过实际测试和查阅资料后。其实,并不是这样的。造成这样的情况有两方面原因,一方面是该类型的服务器被玩坏了。之前有太多人选择日本的服务器,然后又操作不当,导致被qiang了。另一方面,vultr的一些日本服务器,其实线路是从美国那边绕过去的。等于多绕了地球一圈,自然线路情况很差。

还有一个主观重要原因,你的网络对你购买的服务器并不友好。客观来说,国内的移动和联通对vultr要比电信更加更加友好。

为了了解你所购买的服务器是否对你自己的电脑IP友好。这里提供一个测试网址:ping.chinaz.com/ 。你可以在购买了服务器之后,将获取的IP放在这里ping一下,就可以知道服务器IP对你自己的IP是否友好,当然,最直接的是你用自己的电脑直接ping一下服务器IP。

我一开始的两个IP都通过本地ping通。我还以为是自己电脑网络问题。最后是通过ping.chinaz.com/才确认是服务器问题。

所以,一开始几个服务器IP不友好是很正常的,多试几个就OK了。

想换IP,就是将你创建的服务器destroy掉,然后重新建一个。(如果选择的是同一个地址,如日本,则可能还是那个IP)

 

第二步,一键部署VPS服务器:

除了大佬推荐的Xshell,也可以使用别的,如:putty。(我自己建服务器用的是这个,所以就没用Xshell。)

另外,linux中输入密码,是看不见的。也就是光标是不动的。小白们千万别以为是键盘坏了。。。

另外,购买服务器时最好使用CentOS6的系统,而不是7。因为据说后者并不问题。(反正我自己建博客服务器时是见识了。。。。)

大佬文中的yum -y install wget是为了防止CentOS6没有预装wget命令。(但是,我在使用过程中,发现已经预装了。)

大佬中的主用下载地址还是很可靠的,也提供了备用下载地址,我就不再多发了。如果有需要,可以自己去找。

 

配置好了之后,忘了截图和记录,也没事儿。可以通过 bash ssr.sh命令查看的。

 

第三步,一键加速VPS服务器:

加速器,主要有锐速和谷歌BBR加速。以前只用锐速的,但是据某个评测说,在延迟较高时,谷歌BBR加速更加有效,我就装了谷歌BBR加速。

大佬的文中并没有写锐速的加速。如果需要可以参考以下另一位大佬的操作:

锐速破解版一键脚本
锐速破解版安装方法(一次性复制):
wget -N --no-check-certificate && bash serverspeeder-all.sh
锐速破解版卸载方法:
chattr -i /serverspeeder/etc/apx* && /serverspeeder/bin/serverSpeeder.sh uninstall -f
几个相关命令:
service serverSpeeder status 查看serverSpeeder的状态
service serverSpeeder start | stop | restart 停止暂停重启锐速

(摘选自:

 

好了,暂时就说了么多了。我自己配置好服务器之后,油管看4k视屏是没有任何压力的。

附上图片一张

小鱼儿玄机30码 2

 

(个人原创,转载请注明来处)

 

搭建ssr服务器 首先,先说一下,为什么这么久没写博客。 一方面,最近在搭建自己的服务器。挺忙的。 另一方面,...

Docker 容器互联方法

Docker容器都是独立的,互相隔离的环境。然而,它们通常只有互相通信时才能发挥作用。

虽然有许多方法可以连接容器们,可是我将并不会试着去将其全部讨论在内。但是在这一系列的方法中,我们将看看那些常用的做法。

虽然看起来是很浅显,但是这对于与Docker成天打交道的朋友来说,理解这些技术及底层的设计理念就显得非常地重要了。

理解这些主题将会:

  • 帮助开发和运维人员探索广泛的容器部署的选择。
  • 让开发和运维人员更自信的着手于微服务(microservice)架构设计。
  • 让开发和运维人员可以较好的编排更复杂的分布式应用程序。

幸运地是,大量的连接选项为容器间通信打开了更为广泛的方法,可以让我们灵活地选择一个架构并能适合任何应用程序的需求。

小鱼儿玄机30码 3

在这篇文章中,我们将会看一下三个较为古老也是更基本的连接各容器的方法。我们会将这种知识和经验作为基石,然后在下一章节中转移到两种较新,较为简单且更强大的方法。

 

一、 重试机制

最容易也最简单被人想到的容错方式,当然就是“失败重试”,总而言之,简单粗暴!简单是指它的实现通常很简单,粗暴则是指使用不当,很可能会带来系统“雪崩”的风险,因为重试意味着对后端服务的双倍请求。 

配置

在我们展示容器间如何被连接之前,我们需要先建立一对容器作为本次的例子。

第一个镜像将是来源于一个简单的Ubuntu操作系统安装。它将扮演一个客户端容器的角色。

首先,我们创建该容器并连接到它。

  1. $ sudo docker run -itd --name=client_setup ubuntu /bin/bash
  2. $ sudo docker attach client_setup

接下来,一旦有了容器内的shell程序,我们就可以运行以下命令:

  1. $ apt-get install curl

如果你看不见shell命令提示符,点击键盘方向区的向上箭头。

当容器安装完毕,执行CTRL P和CTRL Q命令退出该容器。

紧接着我们停止并提交该容器。

  1. $ sudo docker stop client_setup
  2. $ sudo docker commit client_setup client_img

现在我们可以使用刚才创建的名为client_img的容器了。

第二个容器我们还是从之前的Ubuntu操作系统的安装上获得。但是这一次,我们将把它修改成一个运行了Apache HTTP的服务器容器。

首先,我们像之前一样建立并且连接到它:

  1. $ sudo docker run -itd --name=server_setup ubuntu /bin/bash
  2. $ sudo docker attach server_setup

然后,一旦我们可以用容器内的shell程序了,就可以能安装Apache的HTTP服务了。

  1. $ apt-get install apache2

当容器安装完毕,执行CTRL P和CTRL Q命令退出该容器。

现在我们停止并提交容器:

  1. $ sudo docker stop server_setup
  2. $ sudo docker commit server_setup server_img

那么现在我们就有了两个镜像了,分别是 client_img 和 server_img。

当这些设置好后,我们就可以探索多种的容器间连接的可能性了。

 

1. 简单重试

我们请求一个服务,如果服务请求失败,则重试一次。假设,这个服务在常规状态下是99.9%的成功率,因为某一次波动性的异常,成功率下跌到95%,那么如果有重试机制,那么成功率大概还能保持在99.75%。而简单重试的缺陷也很明显,如果服务真的出问题,很可能带来双倍流量,冲击服务系统,有可能直接将服务冲垮。而在实际的真实业务场景,往往更严重,一个功能不可用,往往更容易引起用户的“反复点击”,反而制造更大规模的流量冲击。比起服务的成功率比较低,系统直接被冲击到“挂掉”的后果明显更严重。

小鱼儿玄机30码 4

亿级Web系统的容错性建设实践 - 徐汉彬Hansion - 技术行者

简单重试,要使用在恰当的场景。或者,主动计算服务成功率,成功率过低,就直接不做重试行为,避免带来过高的流量冲击。

小鱼儿玄机30码 5

亿级Web系统的容错性建设实践 - 徐汉彬Hansion - 技术行者

Docker桥接(Bridge)

单个Docker容器是默认地与其他容器和外部网络隔离的。Docker提供了bridge接口,名为docker0,这其实是在Docker Engine安装时就建立好的。

它通过Docker的bridge接口可以让容器间以及容器和主机之间进行通信。

我们可以通过下面的命令来查看一个位于Docker宿主机上的Docker bridge:

  1. $ ifconfig docker0

你可以看到类似如下的输出:

  1. docker0   Link encap:Ethernet  HWaddr 02:42:a2:dc:0f:a8
  2. inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
  3. inet6 addr: fe80::42:a2ff:fedc:fa8/64 Scope:Link
  4. UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
  5. RX packets:1477 errors:0 dropped:0 overruns:0 frame:0
  6. TX packets:2436 errors:0 dropped:0 overruns:0 carrier:0
  7. collisions:0 txqueuelen:0
  8. RX bytes:83901 (83.9 KB)  TX bytes:3606039 (3.6 MB)

该bridge接口在本地一个单独的Docker宿主机上运行,并且它是我们本篇文章所提及的所有三种方法背后的连接机制。在下一章节中,我们将转向overlay接口,这种接口允许把网络容器部署在多个Docker宿主机上。

 

2. 主备服务自动切换

既然单一服务的重试,可能会给该带来双倍的流量冲击,而最终导致更严重的后果,那么我们不如将场景变为主备服务的自动重试或者切换。例如,我们搭建了两套获取openid的服务,如果服务A获取失败,则尝试从服务B中获取。因为重试的请求压力是压到了服务B上,服务A通常不会因为重试而产生双倍的流量冲击。

小鱼儿玄机30码 6

亿级Web系统的容错性建设实践 - 徐汉彬Hansion - 技术行者

这种重试的机制,看似比较可用,而实际上也存在一些问题:

(1) 通常会存在“资源浪费”的问题。因为备份服务系统,很可能长期处于闲置状态,只有在主服务异常的时候,它的资源才会被比较充分地使用。不过,如果对于核心的服务业务(例如核心数据、营收相关)进行类似的部署,虽然会增加一些机器成本和预算,但这个付出通常也是物有所值的。

(2) 触发重试机制,对于用户的请求来说,耗时必然增加。主服务请求失败,然后再到备份服务请求,这个环节的请求耗时就至少翻倍增长,假设主服务出现连接(connect)超时,那么耗时就更是大幅度增加。一个服务在正常状态下,获取数据也许只要50ms,而服务的超时时间通常会设置到500-1000ms,甚至更多,一旦出现超时重试的场景,请求耗时必然大幅度增长,很可能会比较严重地影响用户体验。

(3) 主备服务一起陷入异常。如果是因为流量过大问题导致主服务异常,那么备份服务很可能也会承受不住这种级别的流量而挂掉。

重试的容错机制,在AMS上有使用,但是相对比较少,因为我们认为主备服务,还是不足够可靠。

端口公开(Exposing Ports)

首先,让我们看下如何运行一个容器服务并且公开其80端口(HTTP)给其他容器。

为了这么做,我通过expose命令去运行该容器,这是告诉Docker在运行该容器的时候让其公开特定的端口。当然,被公开的端口是可以被其他容器访问的。

让我们运行server_img并且把该容器命名为server1,公开其80端口:

  1. $ sudo docker run -itd --expose=80 --name=server1 server_img /bin/bash

接下来我们会按依次命名这些容器(server1,server2以及其他)。

然后,连接到容器:

  1. $ sudo docker attach server1

重申一遍,如果你看不见shell命令提示符,可以使用方向键的向上箭头。

启动该容器内的Apache HTTP服务:

  1. $ /etc/init.d/apache2 start

让我们来看下获得的IP地址:

  1. $ ifconfig
  2. eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:03
  3. inet addr:172.17.0.3  Bcast:0.0.0.0  Mask:255.255.0.0

那么,这样我们就有了172.17.0.3这个IP地址。让我们试一下从一个客户端的容器里去看这些信息吧。

打开第二个终端。

启动名称为client1的容器:

  1. $ sudo docker run -itd --name=client1 client_img /bin/bash

进容器里看一下:

  1. $ sudo docker attach client1

如果你看不见shell命令提示符,可以使用方向键的向上箭头。

让我们来测试一下到server1的连通性:

  1. $ curl 172.17.0.3

如果一切正常,你应该可以看见基于Apache HTTP服务的默认页面。这表明client1容器已经可以与server1容器的HTTP端口正确地建立连接了。

 

本文由小鱼儿玄机30码发布于小鱼儿玄机30码,转载请注明出处:大量的连接选项为容器间通信打开了更为广泛的

关键词: 小鱼儿玄机30码