狗子的公司越办越大,越来越多的用户开始使用他的软件看各种足球咨询,而且,用于用户的基数变大了,每天增长的用户数量都在变多,以前可能是每天有十个新用户,那么现在就是每天有了一百个新用户。在一个晚上的服务器宕机事故出现之后,狗子终于意识到,自己的单台服务器应对日益庞大的用户群已经开始体力不支了。于是,他用了之前积攒下来的收益,又购入了三台服务器,并且用其中一台服务器单独运行数据库,作为数据库服务器。
那么现在问题来了,这四台服务器怎么一起使用,同时服务于一个网站的运营呢?
解决方案有两个:
1.三个服务器同时运行相同的代码,在代码页设置三个用户入口,如果用户进入一个入口发现进不去,就选择另一个入口,每个入口对应一台服务器
2.负载均衡
狗子咨询了一些在中大型互联网公司的学长,终于找到了一种解决这个问题还不像第一种方法那样容易有生命危险的办法,那就是nginx。
nginx是个什么东西呢?是用来做服务器负载均衡的,说白了就是当用户发送请求的时候,先经过nginx这个中间人,nginx会去感受哪个服务器比较闲,就会把请求发送到这个比较闲的服务器上去,这样运行多了,就可以做到每个服务器相对的负担比较平衡,这就是负载均衡。nginx可以放在服务器本机,也可以放在单独的一个服务器中,nginx这个中间人会向各个服务器分发请求,并且nginx的性能十分高超,每秒百万级以下数量的请求都可以处理。你可能要问了,如果狗子把nginx单独放在一个服务器上,那么他的三台服务器怎么对应到同一个域名上呢?他是否需要给每个nginx分发的服务器也就是那三台购买三个域名呢?当然不用,事实上,现在我们对外的公共ip已经变成了安装nginx的服务器的ip了,也就是说,我们只要把域名映射到这个nginx服务器就可以了,然后nginx中会有配置,我们只要在配置中写下三个服务器的ip,nginx以后就能把请求分发过去了。那么,我们现在的架构图就变成了下图这样:
当然有,解决方案就是redis。
redis的作用
当然,狗子又有了解决办法。他又购入了两台服务器当作数据库服务器,然后把数据库进行了分库分表的操作,分别把数据存在三台数据库服务器上。当然狗子觉得这还不够,因此,他又使用了一种技术,将数据库进行了读写分离。
时光飞逝,转眼间五年的时间过去了,狗子已经从一个中小型互联网公司的小老板摇身一变成了一个上市公司总裁,和马云马化腾等it行业巨佬互动成了他的日常,他的一句话可以动摇it界,他的网站也拥有了上亿的用户。。。。。
随着公司变为巨头,狗子的经验不断累积,他发现自己的公司虽然体量很大,开发的产品越来越多,功能越来越全面,但是总是有那么一部分的功能是重复的。假如在一个新的页面或者产品中,刚开始开发时有那么10%是和以前开发过的页面或者产品的功能是重复的,那么,等到这个新东西的功能开发接近完善的时候,就可能会有70%的功能和从前开发的一样。仔细想想这是一件很可怕的事情,狗子居然画了70%的开发时间和开发成本在做以前早就做过的事情。
这狗子就不能忍了,于是他想到了一个好办法,既然面向对象编程语言中有封装的这种概念,把代码的重复部分封装起来便于重复使用,那么产品和产品之间为何不能封装相同的东西便于使用呢?
于是,他开始实现微服务的概念,解释起来可能一上来比较难于接受,我们先来看,刚刚我们的架构图中的产品实际上可以看成一整个系统,假设这个系统叫做系统A。那么,我们现在开发出来了其它的各种产品或者各种页面,也可以看作是新的系统B和系统C。现在,系统ABC之间有很多重复的部分,于是,我们想到了将这些重复的部分放到一起,供三个系统同时调用。那么实际上,这个重复的部分就是被封装起来的微服务,微服务是一种模块化开发,把产品的功能提炼成多个模块,在开发时把模块拼接起来,就可以省去大量的工作。为了实现一个模块,模块中也需要带有服务器集群等东西。听了这些,我们下面的架构图看起来应该没有那么难懂了: