分布式
文章平均质量分 87
iloveoverfly
年轻人不讲code德
展开
-
微服务系统保障选择Hystrix还是Sentinel?
Hystrix在spring cloud系统中,随着业务量的增加,默认选用Hystrix作为系统的熔断降级方案。由于,系统中使用security jwt方式做权限认证,服务之间feign使用RequestTemplate在header中传递token。开启Hystrix后,由于默认的隔离机制是线程池,在调用下游服务时,会重新创建线程,RequestContextHolder通过ThreadLocal无法获取token。如何让token传递到下游服务呢?可以使用hystrix信号量的机制进行服务的容错原创 2021-02-09 11:16:15 · 1103 阅读 · 2 评论 -
为什么要使用注册中心?是eureka还是nacos?
为什么要使用注册中心有使用过ip:port地址直接调用服务的开发经历么?该段痛苦的经历在此处省略500字......,该种方式的缺点:需要手动的维护所有的服务访问ip地址列表。 单个服务实现负载均衡需要自己搭建,例如基于容器化多实例部署单个服务,在实例之间做负载均衡。使用注册中心能够实现服务治理,服务动态扩容,以及服务调用的负载均衡,完整调用链路示例如下:服务提供者:向注册中心根据服务名称提供服务访问的ip:port以及其他信息。 注册中心:根据服务名称,存储对应的ip:port以及其原创 2021-01-14 20:48:31 · 11266 阅读 · 4 评论 -
微服务日志输出如何处理?
Api日志为了方便日志跟踪,api日志一般会要求显示请求路径,方法类型,执行时间,请求的入参,请求头,以及请求响应。如果是微服务之间的调用,需要设置全局的请求id用于标识整个链路请求。基于控制层的拦截器实现,定义LogFilter实现日志的输出。微服务之间请求的全局id通过header传递,使用HttpServlet的装饰类进行扩展header的设置。源码如下:public class LogFilter implements Filter { private static final原创 2020-12-11 17:31:09 · 2874 阅读 · 0 评论 -
商品库存的扣除过程中如何防止超卖?
在商品购买的过程中,库存的抵扣过程,一般操作如下:select根据商品id查询商品的库存。 根据下单的数量,计算库存是否足够,如果存库不足则抛出库存不足的异常,如果库存足够,则减去扣除的库存得到最新的库存剩余值。 set设置最新的库存剩余值。上述过程的伪代码如下:// 根据商品id获取商品剩余库存select stock_remaing from stock_table wher...原创 2020-04-16 23:16:02 · 11947 阅读 · 3 评论 -
为什么会数据不一致?常见分布式实现方案有哪些?
数据库事务的ACID特性数据库事务特性包括原子性(Atomicity )、一致性( Consistency )、隔离性或独立性( Isolation)和持久性(Durabilily)。以下单为例,在单体的电商系统中,调用下单服务,整个服务操作在同一事务中完成。下单成功以后,扣减库存,生成订单操作会同时生效,数据都会写入库存数据库,订单数据库。流程如下:在分布式系统中,如果只是将下单服务...原创 2020-04-14 20:35:02 · 6513 阅读 · 0 评论 -
什么是CAP?适用的场景有哪些?
概述在分布式系统中,围绕着CAP理论,主要关注点就是复制,一致性,容错性。复制为了保证系统的高可用和高可靠性,通过复制的方式,让服务实例运行多个副本,数据在系统中也存储多个发副本。以服务实例多副本为例,当一个服务发生异常时,客户端就直接调用其他正常的副本。如下:服务A有两个副本,分别为副本1和副本2。当客户端调用服务A时,如果服务A发生异常无法调用,此时,客户端调用副本1或者...原创 2020-04-11 22:30:21 · 10559 阅读 · 0 评论 -
消息中间件之常见使用场景
概述消息中间件例如,Kafka,RocketMQ和RabbitMQ等等,是业务开发中不可或者的组件。通常消息中间件包括3个角色组成,如下:生成者(Producer),生产消息。 消息代理(message broker),存储生产者产生的消息。 消费者(Consumer),从消息代理获取并消费消息。大致流程图如下:常见场景通常消息的使用场景有如下几类:应用解耦 流量...原创 2020-04-10 23:12:50 · 3989 阅读 · 0 评论