Category: Distributed Architecture
[转]深入剖析通信层和 RPC 调用的异步化:应用场景、实践及技术难点
1. 异步 RPC 调用的应用场景 1-1. 缩短长流程的调用时延 随着业务分布式架构的发展,系统间的系统调用日趋复杂,以电商的商品购买为例,前台界面的购买操作涉及到底层上百次服务调用,形成复杂的调用链,示例如下:
[转]携程新一代监控告警平台Hickwall架构演进
监控告警是网站可用性的第一道防线,为网站提供更加实时可靠高效的监控告警,对互联网企业具有非凡的意义。致力于这个目标,经过不断地改进,携程新一代监控告警平台 Hickwall 在存储效率、查询速度和告警可靠性方面都有了极大的改善。 本文将从存储、聚合、告警三个方面介绍 Hickwall 在核心架构方面的演进。
[汇总]分布式事务
阿里分布式事务框架GTS开源 为什么阿里规定需要在事务注解@Transactional中指定rollbackFor? 1.4 w字,25 张图让你彻底掌握分布式事务原理 别以为面试老问分布式事务,项目里就一定要用,坑贼多! 《我想进大厂》之分布式事务篇 从事务的ACID开始,向大家先说了XA是分布式事务处理的规范,之后谈到2PC和3PC,2PC有同步阻塞、单点故障和数据不一致的问题,3PC在一定程度上解决了同步阻塞和单点故障的问题,但是还是没有完全解决数据不一致的问题。 之后说到TCC、SAGA、消息队列的最终一致性的方案,TCC由于实现过于麻烦和复杂,业务很少应用,SAGA了解即可,国内也很少有应用到的,消息队列提供了解耦的实现方式,对于中小公司来说可能是较为低成本的实现方式。 最后再说目前国内的实现框架,云端阿里云的GTS兼容Seata,非云端使用Seata,它提供了XA、TCC、AT、SAGA的解决方案,可以说是目前的主流选择。 基于MySQL和DynamoDB的强一致性分布式事务实践
[转]亿级流量架构系列专栏总结[3] 数据一致性重构指南
亿级流量系统架构之如何保证百亿流量下的数据一致性(上) 亿级流量系统架构之如何保证百亿流量下的数据一致性(中) 亿级流量系统架构之如何保证百亿流量下的数据一致性(下) 如何保证消息中间件全链路数据100%不丢失(1) 如何保证消息中间件全链路数据100%不丢失(2) 消息中间件如何实现消费吞吐量的百倍优化 如何保证生产者投递到消息中间件的消息不丢失
[转]亿级流量架构系列专栏总结[2]架构可扩展性
在《亿级流量系统架构》系列第一阶段中,我们从零开始,讲述了一个大型数据平台的几个方面的构建,包括: 如何承载百亿级数据的存储挑战 如何承载设计高容错的分布式架构 如何设计高性能架构,使之能承载百亿级流量 如何设计高并发架构,能够支撑住每秒数十万的并发查询 如何设计全链路99.99%的高可用架构 好!架构演进到这个时候,系统是否无懈可击了呢?
[转]携程200T+规模的Redis容器化实践
1. 背景 携程大部分应用是基于 CRedis 客户端通过集群来访问到实际的 Redis 的实例,集群是访问 Redis 的基本单位,多个集群对应一个 Pool,一个 Pool 对应一个 Group,每个 Group 对应一个或多个实例,Key 是通过一致性 hash 散列到每个 Group 上,集群拓扑图如截图所示。 这个图里面我们可以看到集群,Pool,Group 还有里面的实例,这是携程 Redis 一个比较常见的拓扑图,如下图: 2. 为什么要容器化 2-1. 标准化和自动化 Redis 之前是直接部署在物理机上,而 DBA 是根据物理机上设定的 Redis 的版本来选择需要部署的物理机,携程的各个版本的...
[转]Netty学习和进阶策略
1. 背 景 1-1. Netty 框架的特点 Netty 的一个特点就是入门相对比较容易,但是真正掌握并精通是非常困难的,原因有如下几个: 涉及的知识面比较广:Netty 作为一个高性能的 NIO 通信框架,涉及到的知识点包括网络通信、多线程编程、序列化和反序列化、异步和同步编程模型、SSL/TLS 安全、内存池、HTTP、MQTT 等各种协议栈,这些知识点在 Java 语言中本身就是难点和重点,如果对这些基础知识掌握不扎实,是很难真正掌握好 Netty 的。 调试比较困难:因为大量使用异步编程接口,以及消息处理过程中的各种线程切换,相比于传统同步代码,调试难度比较大。 类继承层次比较深,有些代码很晦涩(例如内存池、Reactor 线程模型等),对于初学者而言,通过阅读代码来掌握 Netty 难度还是比较大的。 代码规模庞大:目前,Netty 的代码规模已经非常庞大,特别是协议栈部分,提供了对 HTTP/2、MQTT、WebSocket、SMTP 等多种协议的支持,相关代码非常多。如果学习方式不当,抓不住重点,全量阅读 Netty 源码,既耗时又很难吃透,很容易半途而废。 资料比较零散,缺乏实践相关的案例:网上各种 Netty 的资料非常多,但是以理论讲解为主,Netty 在各行业中的应用、问题定位技巧以及案例实践方面的资料很少,缺乏系统性的实践总结,也是 Netty...
[总]消息顺序性为何这么难?
很多业务都需要考虑消息投递的顺序性: 单聊消息投递,保证发送方发送顺序与接收方展现顺序一致 群聊消息投递,保证所有接收方展现顺序一致 充值支付消息,保证同一个用户发起的请求在服务端执行序列一致 消息顺序性是分布式系统架构设计中非常难的问题,有什么常见优化实践呢?
[转]Kafka 2.0升级实战!携程的经验有何可借鉴之处
早在 2014 年,携程的一些业务部门开始引入 Kafka 作为业务日志的收集处理系统。2015 年,基于 Kafka 的高并发、大数据的特点,携程框架研发部在 Kafka 之上设计了 Hermes Kafka 消息系统,作为大规模的消息场景的统一的中间件。随着业务量的迅速增加,以及具体业务、系统运维上的一些误用,Kafka 现有系统变得不稳定,经历了多次 down 机,故障期间完全不可用,持续时间长达 5 小时以上,恢复缓慢。Kafka 还能用多久?成为一个迫切棘手的问题。问题严重又难以解决,必须做出改变。 本文主要分享携程将 Kafka 从 0.9 升级到 2.0 的实战经验以及基于 Kafka 2.0 的应用实践。这是 InfoQ 特别策划《Kafka 的七年之痒》专题系列文章的第三篇,前两篇文章回顾见 《Kafka 从 0.7...