互联网设计之关键:一切服务皆可路由

       对于互联网服务的架构设计,觉得最重要的一条就是:一切服务皆可灵活路由。只要做到这一点,那么你的架构就成功了一大半了。你的服务就可以从几千人动态扩展到上亿人,可以不停的增加新的应用,提供新的功能, 所需要的仅仅是不停的增加机器和带宽,而不用修改程序。

      其实要做到这点也挺简单,就是要提供一个专门的路由服务。这个路由服务,就是回答别人的提问,告诉别人到哪台机器上,可以得到某个服务。某个服务每次要调用其他服务的时候,就到这个路由服务上去查询一下哪台机器提供我所需要的服务。千万别自作主张,认为自己知道某个服务在某台机器上,而不去问路由服务,自己直接去某台机器上调用某个服务。

     

    (1)用户的请求,可以通过域名服务、nginx等,分配到各个接入机器上。接入机器常用的就是web服务器。随着用户量增大,接入机器肯定要很多,那么如何将用户分配到哪些接入机器上去呢?简单点,可以按用户名称分类,比如数字取模,字母按字母分类(当然也可以转化成数字取模);复杂点,就要靠专门服务去收集汇总所有接入服务器的压力,然后再根据压力大小做负载均衡,分配用户。
     (2)接入机器处理用户的请求,需要调用后台的服务。调用一般通过发送网络包来实现,比如发送udp。后台同一个服务也会有很多机器,请求该发往哪个机器呢?就需要去调用路由服务,去询问他看哪个后台机器可以满足自己的服务,然后再发送到这个后台机器上。
     (3)后台服务,要查询数据库,同样要有一个策略,看在哪个数据库上可以查询到自己想要的数据。这同样由路由服务来提供查询。后台服务先咨询这个路由服务,看哪个数据库可以满足自己的需要,然后再往这个数据库去查询。
     总之,只要路由服务保持可靠,那么当某些服务的机器变动以后,这个路由服务动态更改服务的路由即可,这样就可以提供不中断的服务。  这样增加删除机器也就很容易了,负载均衡也容易了,因为只需要改变路由策略而已。做到这点以后,可靠性,可扩展性,可部署性,可维护性,都方便解决了。
   
      当然,要做好这点,还需要提供不间断的自动监控能力,方便自动的系统维护等等。这些服务,可以预警和及时发现系统故障,以便通知路由服务及时更改路由策略。
       
     其实要做到不间断提供服务,还有一个特别重要的,就是用户状态的维护。做设计的时候,最好能用某些办法做到无状态服务(比如cookie,或者用户请求中携带某些状态信息)。 如果一定是有状态的服务,用户状态总是存放在某个机器上的。一旦这个机器宕机,那么如何恢复是个重要的问题。我的一个基本设计原则,是用户状态最好集中存放在某一个服务上。如果其他服务也需要使用用户的状态信息,那么就来这个服务上去查询。这样做的好处有两个:(1)我只需要维护这个服务的可靠性即可。不管我用什么办法,比如双机热备或者什么,我都只需要保证一个服务的可靠性即可。总比保证多个服务的可靠性容易,代价也小。(2)避免状态不一致引起的Bug。一个服务,我只要小心设计这个服务,就可以维护状态的一致性。状态不一致引起的Bug很难追踪。
        当然,其实这样做,是有代价的,就是增加了网络的负荷。每次都要去查询路由服务,增加了一次网络通信。但这部分的带宽消耗,是可以承受的。相比得到的架构的灵活性,这点付出是超值的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值