1.什么是分布式?
分布式:把一个完整的系统,根据业务功能对系统做拆分, 每个业务功能模块作为独立项目开发,称为一个服务。 一个完整的业务功能,可能需要多个服务进行通信才能完成。 服务之间通信是需要网络的。
2.为什么要使用分布式?
单体架构:将所有业务功能都集中在一个项目中开发,打成一个包部署。耦合度高(维护困难、升级困难) 随着业务越来越复杂,服务也会变得越来越复杂,单台机器的CPU、内存已经无法满足部署一个庞大系统的性能要求。 当然可以通过提高系统配置暂时解决问题,但是不管如何提高系统的配置,单台机器总会达到性能瓶颈的时候, 所以需要多台机器才能应对这些扩张的功能。通过水平(加机器)和垂直(拆分为多个子系统)拆分系统, 变成了一个分布式架构。让更多的服务器进行协作,提供更强大的数据处理能力。 当然集体未必就总是好的,人多力量大的同时,也带来了很多问题。
3.CAP理论 CP AP
分区容错 (Partition-tolerance) 先看 Partition tolerance,中文叫做"分区容错"。 大多数分布式系统都分布在多个子网络。每个子网络就叫做一个区(partition)。分区容错的意思是,区间通信可能失败。 比如,一台服务器放在中国,另一台服务器放在美国,这就是两个区,它们之间可能无法通信。 一致性(Consistency) Consistency 中文叫做"一致性"。意思是,写操作之后的读操作,必须返回该值。举例来说,某条记录是 v0, 用户向 G1 发起一个写操作,将其改为 v1。接下来,用户的读操作就会得到 v1。这就叫一致性。 可用性(Availability) Availability 中文叫做"可用性",意思是只要收到用户的请求,服务器就必须给出回应。 用户可以选择向 G1 或 G2 发起读操作。不管是哪台服务器,只要收到请求,就必须告诉用户,到底是 v0 还是 v1,否则就不满足可用性。
对于任何分布式系统来说,分区容忍是一个给定的条件,如果没有这一点,就不可能做到一致性和可用性。 试想如果两个节点链接断掉了,他们如何能够做到既可用又一致? 最后你只能选择在网络分区情况下,你的系统要么强一致,要么高可用。 AP:可用性+分区容忍性 查询场景、聊天场景、等数据不是太重要的场景,可以接受一定的延迟、消息丢失,从而保障服务的可用。 CP:一致性+分区容忍性 支付、订单、数据重要的场景,当出现分区了,宁愿你整个服务都不可用,也不能造成数据一致性的破坏
4.微服务
微服务:什么是微服务呢? 从名字就能知道,“微服务”就是非常微小的服务。是一种经过良好架构设计的分布式架构,是一种设计思想 微服务可以理解为一种非常细粒度的垂直拆分。 例如,以上“订单项目”本来就是垂直拆分后的子项目, 但实际上“订单项目”还能进一步拆分为“购物项目”、“结算项目”和“售后项目”,
5.Eureka和Nacos区别?
Eureka 是Spring Cloud 微服务框架默认的也是推荐的服务注册中心, Nacos是阿里巴巴最新开源的项目,提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。更敏捷和容易地构建、交付和管理微服务平台。
Nacos:支持服务端主动检测提供者状态。临时实例采用心跳模式,非临时实例采用主动检测模式 Nacos:临时实例心跳不正常会被剔除,非临时实例则不会被剔除 Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
6.SpringCloud
SpringCloud,基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现, 配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFlix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件。SpringCloud利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发。