12年互联网产品开发人眼中的微服务架构云端应用

简介: 拥有超过12年互联网产品开发和管理经验,好雨云创始人兼CEO刘凡对微服务架构云端应用的干货分享。

微服务架构很热,讨论的文章非常多。但如果提到微服务架构的云端应用,可以深入分析的还比较少。本篇来自中生代技术群(FreshmanTechnology)第二期,好雨云创始人兼CEO刘凡的分享。其曾任澳客网 CTO和CEO职位。拥有超过12年互联网产品开发和管理经验,专注于互联网技术架构设计,对产品设计、敏捷开发、安全、OKRs、大数据等领域有深入研究。现推崇反应式编程(http://www.reactivemanifesto.org/),并在多个产品中成功应用。


下为正文:



微服务架构(Microservices Architecture)是一种架构风格和设计模式,提供将应用分割成一系列细小的服务,每个服务专注于单一业务功能,运行于独立的进程中,服务之间边界清晰,采用轻量级通信机制相互沟通、配合来实现完整的应用,满足业务和用户的需求。


微服务的优点:

  •     可独立部署、升级、替换、伸缩
  •     自由选择开发语言
  •     高效利用资源
  •     故障隔离


总结下来就是:灵活、稳定、省资源。

微服务的缺点:

  •     服务多,带来更多操作
  •     管理复杂度提升
  •     部署难度加大


总结就是:服务多,管理难度大。

仅管微服务存在着缺点,但它的优点也是非常吸引人的,目前很多企业也逐渐开始了微服务架构之旅,包括像Twitter,Netflix,Amazon,eBay等大厂商都在使用。如下图是Twitter微服务应用部分架构图。


ebcce4f5a869bb0e59940038b8e1a8a034f08db8

微服务的架构模式


1. 一体化架构模式

6740e4e6e9accb1cee4e0fd38e3207698674b4ba

传统mvc架构,也是一体化模式。


2. 聚合模式

680d0d2ed4d33c553deda95e1ff69b40ea4051ce

从多个服务的结果聚合到一个聚合服务,最常见的表现是聚合服务是Web服务,主要功能是页面表现,后端的服务都是纯业务功能服务,扩展业务只需要增加一个新的后端微服务就可以啦。

聚合服务也可以是一个更高层次的组合微服务,增加业务逻辑后进一步发布成一个新的微服务,这符合DRY原则。另外,每个服务都有自己的缓存和数据库。这个模式是最常用模式。

3. 代理模式

a075a91b4b0628602f13013ef8d4115ea6b6416d

4. 资源共享模式

aea2cbfd83ecf6e07d2f1e4e722b4992f36f9703

可实现部分业务的逻辑分离,数据共享。

用在一体化架构往微服务架构迁移过程中的过度状态。还可用在两个服务之前有数据一致性要求,通过统一的数据库事物来实现。

5. 异步消息模式

372e961f3073b40c6b18a361ee3a37b1d0e37af3

上面的其它模式都是同步的,会阻塞。异步消息模式适合不需要同步的场景,比如任务型服务。

主要的模式就这些,其它模式可以由这些模式演变。

大量微服务带来的挑战


1. 服务部署的挑战


每个服务都需要独立的代码管理、版本管理、编译构建、部署到测试环境,部署到生产环境,代码回滚等等事情,如果要有几十个服务要部署,人工管理几乎不可能完成。

2. 服务绅缩的挑战


无状态服务需要配置负载均衡和增加节点,有状态服务需要扩充单个服务的资源,如果需要减少资源浪费,需要监控每个服务,还需要减少节点和资源。

3. 服务高可用的挑战


每种服务的高可用策略都不一样,无状态服务相对简单,管理每个有状态服务都是难题。

4. 服务容错的挑战


任何一个服务的可用性都不是 100% 的。在分布式系统中,当我依赖的某个服务不可用的时候,我自身也将不能工作。如果是一个复杂的分布式系统,会依赖更多服务,任何一个服务不可用的时候,系统自身也将不能工作,再加上网络不稳定的因素,系统自身的可用性将大幅度下降。

5. 依赖关系的挑战


依赖配置文件,如果写在代码中,需要重新部署才能生效,而配置文件还会污染代码。

6. 服务监控的挑战


监控cpu?负载?大量微服务如何同时监控?


微服务在云端的解决方案

底层是通过docker实现的,只是用户感受不到docker。

内部封装,不用管理计算资源和网络资源,并把某些复杂特性包装在内部。整体对外,服务做为一个整体管理。

3704538f69485946bf1d398b975a5d34836cbdd2

开发语言支持Java、Python、PHP、Ruby、Golang,Node.JS等,代码支持Github,好雨托管仓库。

700e9e26d785add6e554c33ab518cb1b9d333c62

水平伸缩用于无状态的 Server和Worker 类的服务。

垂直伸缩用于有状态的服务。


部分有状态服务支持水平分区( sharding),用户只需要调整节点个数就可以了。


01d51e15e2bb3769743973142d1054776a41cc74

一般通过LB支持无状态服务高可用,支持有状态服务高可用。

8f7a71560e9f8dc9a8e716df0fe9a2c5eeed431d

类似Spring,参数通过环境变量实现。

实现微服务之间的连接和编排,以上微服务模式都可以通过这种方式动态配置实现。

4ddc3ff86bb05e052dc4367ce3c1e484cdaa5865

类似保险丝,当服务B变慢,达到断路器的阀值,服务B,将自动下线,不至于影响其他服务,当延迟变小,服务逐步恢复。容错还有一种方式是使用异步,可以参考CQRS模式。

915955bbf2ac003c1e77787190018c9f48439e9b

业务指标:平均响应时间,吞吐率 ,在线人数。

在实际场景中,使用业务监控可以替代技术监控,而且更加简单容易理解。


b5b8e2cff71b21ee64c8f4a46004a47d69a9fc760cf2a1a5df098fb0b34d7159f1afd41768bb6302

单个REST服务的实时性能分析,数据库性能分析,最慢的Sql语句不一定是对数据库影响最大的。实时性能分析通过CEP+log实现,以前工作一直使用,没有APM炫,但解决了很多实际问题。还在实现了Mongodb ,Redis等数据存储的实时性能分析。

至此,相信你也对微服务,微服务的构架模式以及微服务在现实场景中的应用有了一个大概的认识了。如果你还想要了解得更多,请继续查看下面的Q&A环节内容。



Q&A


Q1 99.95%的SLA是如何测量的,现在都有那些初始客户? 

刘凡: 我们自己实现了负载均衡组件,监控每个租户的服务可用性,后端服务不可用和错误返回码都会算到不可以用时间。我们现在的用户有工行,天津滨海新区管委会,章鱼网,51talk,学霸君,好贷宝等。

Q2 依赖调整配置就生效吗,背后是如何做到的? 

刘凡: 我们的服务发现是通过etcd实现的,之前实现了完全实时修改实时生效的方案,但是太复杂了,现在的实现方式是通过环境变量实现的,修改配置之后需要重启,无状态服务用户感知不到。 

Q3 SOA的时候重点谈到了美好的编排,不同粒度的层次,逐层编排,其实最考验设计能力和抽象能力,编排本身的美好得不到很好的利用,如何破?


刘凡: 这只能考验一个公司的技术架构师和业务架构师了,我以前身兼这两职,我没遇到过这些问题。我也没有其它思路。


Q4 监控部分对于内存泄漏,堆栈分析有没有好的支持? 

刘凡: 这个没有,但是如果由于内存泄漏导致服务死掉,我们平台会自动重启。

Q5 你们云平台本身有没有异地容灾的能力?  

刘凡: 我们能实现geo-master,现在设计如何对用户开放这类服务。

Q6 微服务这块在移动端有没有好的案例,一般像Android和 iOS这类移动应用上如何使用和借鉴微服务模式呢?

刘凡: 刚才分享的代理模式特别适合用户移动开发场景,微服务都是API。代理模式是一种特殊的聚合模式,对外是一个统一的包装,一般做内部接口的代理,对外统一一个接口,内部可以用多个微服务实现。

Q7 服务之间有没有调用链的设计,方便跟踪跨服务的问题,可以分享一下吗?

刘凡: 细化的跟踪没有,通过服务拓扑可以实现粗力度的。

Q8 工行上的是那些业务,好雨云擅长是高性能高PV的业务,还是对事务一致性要求都有很高要求的业务?

刘凡: 高PV场景我们特别适合,因为我们非常容易伸缩。事务一致性我们有两种方式,一种大家可以选择自己喜欢的存储服务,各类数据有存储自己的方式。第二种,我们通过akka实现一套高一致性,高性能的解决方案,单机能做到每秒100万的事务。

Q9 你提到了类似在线人数之类的业务监控,对于产品可以增强链路监控功能否,比A9如用户是在操作链路上那个环节流失得比较严重,做统计以便产品改进,这些监控本身需要调用平台API吗?

刘凡: 不太理解链路是什么意思,是指用户行为数据吗?现在我们没有,我们不擅长这块。

Q10 服务拓扑就是服务级依赖关系吧?

刘凡: 是的,每个微服务有自己的响应时间和吞吐率,表现在拓扑图里,可以粗力度分析出问题。

Q11 我们通过akka实现一套高一致性,高性能的解决方案,单机能做到每秒100万的事务,这块能不能具体说一下,比如一个第三方支付简单的A用户到B用户的转账场景,A和B在不同的sharding单元。

刘凡: akka的模式是使用CQRS模式,也就是事件溯源的方式,以前数据库的那些事务问题在这都不存在。

Q12 Akka的话是不走数据库直接在内存里做事务吗?

刘凡: 是的,通过事件溯源保证数据一致性。理论上它不是事务,但能实现事务的效果。

Q13 队列技术如何支持的呢?

刘凡: 我们平台支持任何开源的队列服务。

Q14 微服务之间如何通信,协议和数据格式是怎样的?

刘凡: 微服务会有多个节点,但我们会内置LB,对外统一一个服务接口,支持任意协议和格式。

Q15 工行,天津滨海新区管委会,章鱼网,51talk,学霸君,好贷宝主要应用场景,高PV支持,高事务支持,大数据分析,爬虫,devops,通过微服务架构把业务能拆分更小,便于重用和维护。 akka的方案就是联机交易。这些客户具体的应用场景是哪些呢?可以选择1-2个典型case介绍下微服务所产生的价值,如果有联机交易的Case更佳。

刘凡: 介绍下微服务所产生的价值,如果有联机交易的Case更佳主要应用场景,高PV支持,高事务支持,大数据分析,爬虫,devops,通过微服务架构把业务能拆分更小,便于重用和维护。 akka的方案就是联机交易。

Q16 实时性能分析用的是cep +log, 不是很理解cep?

刘凡: 复杂事件处理,实时流处理,通过strom也可以实现。

Q17 如何应对微服务的毛剌现象(某个服务瞬间出现较大延迟的现象,可能会导致某批请求超时等情况)?

刘凡: 不好意思,我没遇到过这种情况,我觉得应该跟实现方式有关。

Q18 akka的方案就是联机交易,akka原先架构体系是什么?遇到了什么样的瓶颈?微服务之后改进的是什么?联机交易规模怎样?

刘凡: 原先就是用传统数据库,交易的事务性能低下,做了sharding会引入新的问题,而且联机分析也有问题,用akka改造后能处理高峰业务每秒10万左右的事务。


                                                           

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
7月前
|
人工智能 自然语言处理 开发工具
统一多模态 Transformer 架构在跨模态表示学习中的应用与优化
本文介绍统一多模态 Transformer(UMT)在跨模态表示学习中的应用与优化,涵盖模型架构、实现细节与实验效果,探讨其在图文检索、图像生成等任务中的卓越性能。
统一多模态 Transformer 架构在跨模态表示学习中的应用与优化
|
6月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
1078 3
|
4月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
8月前
|
存储 编解码 Serverless
Serverless架构下的OSS应用:函数计算FC自动处理图片/视频转码(演示水印添加+缩略图生成流水线)
本文介绍基于阿里云函数计算(FC)和对象存储(OSS)构建Serverless媒体处理流水线,解决传统方案资源利用率低、运维复杂、成本高等问题。通过事件驱动机制实现图片水印添加、多规格缩略图生成及视频转码优化,支持毫秒级弹性伸缩与精确计费,提升处理效率并降低成本,适用于高并发媒体处理场景。
560 0
|
4月前
|
人工智能 JavaScript 前端开发
GenSX (不一样的AI应用框架)架构学习指南
GenSX 是一个基于 TypeScript 的函数式 AI 工作流框架,以“函数组合替代图编排”为核心理念。它通过纯函数组件、自动追踪与断点恢复等特性,让开发者用自然代码构建可追溯、易测试的 LLM 应用。支持多模型集成与插件化扩展,兼具灵活性与工程化优势。
367 6
|
5月前
|
人工智能 Cloud Native 中间件
划重点|云栖大会「AI 原生应用架构论坛」看点梳理
本场论坛将系统性阐述 AI 原生应用架构的新范式、演进趋势与技术突破,并分享来自真实生产环境下的一线实践经验与思考。
|
5月前
|
机器学习/深度学习 人工智能 vr&ar
H4H:面向AR/VR应用的NPU-CIM异构系统混合卷积-Transformer架构搜索——论文阅读
H4H是一种面向AR/VR应用的混合卷积-Transformer架构,基于NPU-CIM异构系统,通过神经架构搜索实现高效模型设计。该架构结合卷积神经网络(CNN)的局部特征提取与视觉Transformer(ViT)的全局信息处理能力,提升模型性能与效率。通过两阶段增量训练策略,缓解混合模型训练中的梯度冲突问题,并利用异构计算资源优化推理延迟与能耗。实验表明,H4H在相同准确率下显著降低延迟和功耗,为AR/VR设备上的边缘AI推理提供了高效解决方案。
810 0
|
4月前
|
机器学习/深度学习 自然语言处理 算法
48_动态架构模型:NAS在LLM中的应用
大型语言模型(LLM)在自然语言处理领域的突破性进展,很大程度上归功于其庞大的参数量和复杂的网络架构。然而,随着模型规模的不断增长,计算资源消耗、推理延迟和部署成本等问题日益凸显。如何在保持模型性能的同时,优化模型架构以提高效率,成为2025年大模型研究的核心方向之一。神经架构搜索(Neural Architecture Search, NAS)作为一种自动化的网络设计方法,正在为这一挑战提供创新性解决方案。本文将深入探讨NAS技术如何应用于LLM的架构优化,特别是在层数与维度调整方面的最新进展,并通过代码实现展示简单的NAS实验。
|
6月前
|
Web App开发 Linux 虚拟化
Omnissa Horizon 8 2506 (8.16) - 虚拟桌面基础架构 (VDI) 和应用软件
Omnissa Horizon 8 2506 (8.16) - 虚拟桌面基础架构 (VDI) 和应用软件
345 0
Omnissa Horizon 8 2506 (8.16) - 虚拟桌面基础架构 (VDI) 和应用软件