谈谈分布式、集群与微服务

分布式:一个应用(业务)分拆多个子应用(业务),部署在不同的服务器上。子应用(业务)之间的计算结果通过网络通讯协议进行消息传递。
集群:同一个应用(业务),部署在多个服务器上,独立运行,应用(业务)都相同,多个服务之间不需要通讯。
       一个复杂的大型应用应该是分布式和集群的结合,具体实现就是业务拆分成很多子业务,进行分布式的部署,然后针对每个子业务进行集群部署,这样每个子业务如果出了问题,整个系统完全不会受影响。
       也可以先对这个应用中最紧急的子业务先进行集群部署,然后通过分布式的部署方式依次将其他拆分出的子业务部署上线。在实际运行中对承担压力较大的子业务进行集群。

微服务:一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。
系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务,每个任务代表着一个小的业务能力。

分布式对应的是单体应用,所以和单体应用相比优缺点如下:

分布式面临的问题:

1.事务管理变得复杂,写入的接口需要做幂等设计,写入之前先查询是否存在,避免重复写入。其实根据CAP和BASE理论,不可能在高可用分布式情况下做到一致性,所以一般都是做最终一致性保证;

2.当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大 ;

3.服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动;

4.服务多了,沟通成本也开始上升,调某个服务失败该找谁?服务的参数都有什么约定? 

5.高可用问题。为了达到高可用,每个服务至少是两台机器,大型项目会采用数十上百台来部署一个服务,这不仅是保证服务的高可用,更是提升服务的QPS,如此又带来一个新问题,一个请求过来到底路由到哪台机器?路由算法很多,有DNS路由,如果session在本机,还会根据用户id或则cookie等信息路由到固定的机器,不过现在应用服务器为了扩展的方便都会设计为无状态的,session会保存到专有的session服务器。如果为了保证异地多活的多机房,夸机房调用的开销太大,肯定会优先选择同机房的服务,路由算法还要参考具体的机器分布来考虑。

6.服务发现 
服务的提供者如何被服务的使用者发现,当然很多情况一个服务既是某些服务的提供者,也是其他服务的使用者,这就需要一个中间的机制来让大家互相感知,例如Zookeeper(简称ZK),其他类似作用的组件还有spring boot的eureka和taobao的HSF的配置中心,他们只是不同的技术实现而已。Zookeeper是一个高可用集群组件,它可以在集群之间保持同步和一致,维护统一的一个类似于文件目录的结构。ZK包含服务端和客户端,每个机器维护一个客户端保持与服务端的心跳,客户端可以在整个目录的任何节点设置Watcher感知,这样只要ZK维护的该目录有任何改动,客户端都能收到回调通知。如果这个目录存放的某个服务提供者的ip列表,ZK能够感知该服务的心跳,一旦该机器与ZK失去联系,目录变化,服务使用者感知到请求,这样服务使用者调用的时候就获取不到该服务提供者的ip,这样完成动态的失效转移。当服务恢复,ip又添加回原有ZK维护的节点列表。ZK采用了Paxos算法保证了ZK之间的一致性,内部的选举机制保证了集群只要有超过半数的机器正常,集群就可用。高可用的ZK成为一个服务的订阅与通知的中心,这样完成服务发现的功能。

7、数据库性能与高可用 
数据库是重要的部分,很多时候我们需要持久化很多数据完成业务逻辑,但是数据库很难像应用服务器那样做到线性的扩容,尤其是关系数据库,所以现在会引入一些对集群支持比较好的NoSQL去支撑系统对性能的要求,但是NoSQL也有很多局限性,例如没有事务支持,这点在一些对事务敏感的情况下是难以忍受的,还有查询的不方便,很难支持join等操作,所以NoSQL的使用对于场景的判断非常重要,现在Redis和Memcache等更多应用在缓存使用上,核心数据库依然采用关系数据库,以MySQL为代表。数据库的性能主要是在查询的优化上,项目实战中DBA经常会警告一些常用的SQL并没走索引进行了全表扫描,所以合理使用索引进行高效的查询是很必要的。当然索引也不是建立的越多越好,例如某些重复率很高的字段不适合建索引,大量的索引甚至比数据本身更占用空间。对于数据量多的情况,我们可以采用分表分库的方案进行拆分,分表一般采用关键字段进行取模,尽量让多个表进行均分。负载过高可以采用主从读写分离等等。 
高可用的数据库一般采用主从机制,主库挂了之后会自动转移到备库,曾经跟DBA讨论过,线上不能引入流量到备库,如果性能不够自动扩容,因为如果线上主库挂掉,瞬间流量落到从库依然会挂,到头一台机器也不能用了。原则主从是为了高可用,而不是为了扩容,扩容操作应该在机器负载较高的时候就能收到警报之后。能够失效转移。现在高可用主要的方案也是冗余,包括异地机房等等,本质上都是冗余。
本文参考了:分布式优缺点_gangsijay888的博客-CSDN博客_分布式的好处

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值