喜马拉雅的微服务服务化实践是一次深入的IT解决方案,旨在解决随着业务增长和用户量增加带来的系统复杂性问题。在起步阶段,面临的主要挑战是业务越来越多,维护和迭代变得复杂,用户量快速增长,这使得传统的单体架构难以应对。在这样的背景下,喜马拉雅选择了探索微服务化道路。
在起步之路中,喜马拉雅首先面临了选择开源方案还是自主研发的决策。开源方案可以快速搭建微服务架构,但可能无法满足特定需求,而自主研发则能更好地定制化和适应公司业务。他们最终选择了自研之路,着重在以下几个方面进行了实践和创新:
1. 水平扩展:采用了Zookeeper作为服务注册发现机制,利用其临时节点功能来管理服务生命周期,实现了服务间的高效协作和管理。
2. 发布系统:建立了CMDB(配置管理数据库)统一发布流程,确保了无缝发布和灰度发布,有效降低了部署风险。
3. 日志收集与监控:利用Flume收集日志,并通过Kafka进行传输,将数据存储在HBase或OpenTSDB,再用Spark Streaming进行实时分析,提供了全面的监控能力。
4. 调用跟踪:通过Java Agent和AspectJ技术实现无侵入式的调用埋点,记录每个请求的完整调用链路,便于问题排查和性能优化。
5. 服务治理:建立了防止循环依赖的服务依赖关系计算机制,控制调用深度,实现了业务隔离,根据调用方不同划分服务组和服务范围。
在自研之路的成果中,喜马拉雅实现了业务的自由扩展,流量无损发布,实时监控预警等目标。但同时也认识到存在的不足,如异步调用代码编写复杂,路由不够灵活,缺乏自动熔断机制,大流量业务启动可能出错,且事务支持不足,性能仍有提升空间。
为了进一步优化,喜马拉雅在升级过程中集成了Netty,通过命令行工具和Maven插件简化异步代码编写,改进IDL代码生成器,优化内存使用。此外,他们引入了更灵活的路由策略,如选择集群策略、负载均衡算法(如FailFast、FailOver、SplitMerge、Hybrid、Random、RoundRobin、ConsistentHash),以及Split-Merge路由技术,以适应复杂的业务场景。同时,引入快速失败、熔断、降级策略,如超时、连接释放等,以提高系统的稳定性和容错性。
通过这一系列的实践和升级,喜马拉雅成功地构建了一套高度可扩展、监控完善、容错性强的微服务体系,为公司的持续发展和业务创新提供了坚实的技术基础。