发表于: 2019-12-02 23:37:10
2 1098
今天做了什么
后台-文章管理全部完成.
收获
Spring Cloud服务的注册与发现的方式是基于HTTP而不是RPC
因此不是将Service暴露 ,而是将Controller注册给注册中心.
要实现微服务,必须要解决以下四个问题:
1、客户端如何访问这些服务
2、服务之间如何通信
3、如此多的服务,如何实现?
4、服务挂了,如何解决
Spring Cloud就提供了一个全套解决方案.
微服务重要部件:
1.微服务基本能力
2.服务注册中心服务之间需要创建一种服务发现机制,用于帮助服务之间互相感知彼此的存在。服务启动时会将自身的服务信息注册到注册中心,并订阅自己需要消费的服务。
3.负载均衡服务高可用的保证手段,为了保证高可用,每一个微服务都需要部署多个服务实例来提供服务。此时客户端进行服务的负载均衡。
4.容错
在调用服务集群时,如果一个微服务调用异常,如超时,连接异常,网络异常等,则根据容错策略进行服务容错。目前支持的服务容错策略有快速失败,失效切换。如果连续失败多次则直接熔断,不再发起调用。这样可以避免一个服务异常拖垮所有依赖于他的服务。
5.熔断当调用满足失败次数,失败比例就会触发熔断器打开,有程序自动切断当前的RPC调用,来防止错误进一步扩大。实现一个熔断器主要是考虑三种模式,关闭,打开,半开。
6.SLASLA:Service-LevelAgreement的缩写,意思是服务等级协议。 是关于网络服务供应商和客户间的一份合同,其中定义了服务类型、服务质量和客户付款等术语。
7.API网关一个网关的基本功能有:统一接入、安全防护、协议适配、流量管控、长短链接支持、容错能力。有了网关之后,各个API服务提供团队可以专注于自己的的业务逻辑处理,而API网关更专注于安全、流量、路由等问题。
8.多级缓存
9.超时和重试超时与重试机制也是容错的一种方法,凡是发生RPC调用的地方,比如读取redis,db,mq等,因为网络故障或者是所依赖的服务故障,长时间不能返回结果,就会导致线程增加,加大cpu负载,甚至导致雪崩。所以对每一个RPC调用都要设置超时时间。
10.线程池隔离线程隔离的之间优势就是防止级联故障,甚至是雪崩。当网关调用N多个接口服务的时候,我们要对每个接口进行线程隔离。
11.降级和限流
12.网关监控和统计
API网关是一个串行的调用,那么每一步发生的异常要记录下来,统一存储到一个地方比如elasticserach中,便于后续对调用异常的分析。
问题
1.想把pojo和util抽取成一个common项目 然后引用. 但打包运行时出了些错误.明天继续看看.对模块 项目 依赖这些还是感觉有些绕.
2.写动态查询时连踩了很多坑,很恶心 .最后想到要控制台打印出sql语句才能排查出错误. 果然打印出运行的sql后改起来就很快. 还是要看日志.
明天的计划
写前台-登录.
评论