一、什么是三高系统
高并发、高可用、高性能
二、三高系统演变历史
a、单节点maven聚合项目
在项目创建之初,赶进度、抢时间、为了尽快做出可用产品,往往选择最为简单的单节点maven聚合项目。
有点:开发周期短、运维部署方便、可快速提供可用产品,成本低
缺点:单点故障、难以承受较大流量
b、集群环境maven聚合项目
优点:可用性提高
缺点:无论哪个模块修改,整个项目都要重新发布
ECS:ECS是云服务器, 本质就是一个服务器。运行在云上的一个服务器。主要作用是做运算的,跑各种程序的。
RDS:RDS是云数据库,专业的SQL服务器。用得到MYSQL的非常推荐使用,可以规避ECS装MYSQL遇到的各种问题。
OSS:OSS是对象存储,专业的文件存储服务,推荐文件量大的场景使用,普通小站可用可不用。(不过阿里云现在有5G免费资源。可以用来代替CDN使用,省钱。)
SLB:SLB是负载均衡,均衡负载 价格高,不适合中小站。
c、微服务项目
随着业务量增加,原有项目缺点愈发明细,一个模块改动,这个项目需要重新发布。所以要做服务拆分,减少服务间耦合性
优点:各业务模块互相独立,方便开发
缺点:增加了服务间调用成本、服务拆分后不方便管理
1、如何找到服务间调用的地址
答:采用注册中心,服务启动时将其注册到注册中心服务器上。其他服务想要调用时,到注册服务器上查询。
2、如何发起服务间调用
答:RPC
3、如何实现负载均衡和高可用
答:需要实现服务选择算法和服务集群
1、微服务间调用过程:
a、微服务1想调用微服务2
b、服务1调用注册服务器接口获取到所有服务2的列表
c、通过算法选取一个服务2的通讯方式
d、通过指定的RPC协议来调用服务1的通讯方式
2、内部服务可以这样调用,外部服务如何调用?
答:外部服务无法知道注册服务,无法获取注册服务列表实现自己的调用算法。所以我们需要一个服务提供给外部服务调用,使用此服务作为统一且唯一的服务调用入口。
我们知道服务调用会产生一条链路:A(订单中心)----->B(支付中心)----->C(物流服务),假如有一天,整个服务调用链路特别慢,甚至部分调用会超时,此时如何定位排查问题?,如何避免再发生此类问题?
服务之间不相互影响,不让用户长时间等待无响应,防止引起雪崩。此时我们引入超时机制,即服务的熔断 降级
面试题:
1、dubbo和spring cloud有什么区别?
阶段一、dubbo最早提供了支持RPC调用的商业化框架,期间近一年无更新。
阶段二、spring cloud开源,支持了几乎所有dubbo的功能,制定了规范
阶段三、dubbo地位降低,为了抢占地盘推出spring alibaba
dubbo采用二进制,占用带宽小,开发难度较大;
spring cloud采用http,(s)----->json,带宽大,开发简单
d、云原生分布式微服务项目
ci/cd:持续化集成、持续化部署
Dev Ops
三、三高系统架构图
注:以上内容均学习子马士兵教育黄老师,自己动手整理。如有雷同,纯属师出同门。