【系统架构师】-论文-微服务设计

1、摘要:


        2017年10月,我被任命为系统架构师参与了XXX 运营商AOP 系统架构升级项目,负责架构设计工作,该系统是运营商面向互联网销售产品的系统,自从年中上线流量包订购业务以来,系统订单量飞速上涨,月末订单量达 10 余万笔,客户希望通过营销活动进一步提升订单量,并承载更多业务,但我们评估当前架构无法支撑客户需求,因此提出本项目。
        本文以此项目为例,论述了微服务架构的在项目中的实际应用;首先我梳理了微服务架构的思想、优点和挑战因素,然后分析了本项目的系统现状、影响可靠性的风险点,再大致交代了解决可靠性问题的举措,然后重点论述了采用微服务架构如何达成架构升级目标;最后制定了本次架构升级的技术方案,评审并实施后,经过 1年多来的稳定运行,成功达成了设计目标,获得客户一致好评。

2、正文:


        微服务,是面向服务架构的一种,顾名思义,微服务架构下,服务的粒度很小,每个服务专注于一件事情,微服务架构提倡将系统拆分成一系列细粒度的服务,通过服务的编排组合实现业务需求,服务间通过轻量级通讯协议交互,从而支持微服务架构的系统达成松耦合、组件化、高扩展、高弹性、可修改行、可替代性俱佳的目标,最终提高系统的交付速度,提高交付质量。
微服务的好处很多,首先,它很适合成为新技术的试验场,每个服务都是独立的,可以根据服务自身需要采用合适的技术,如社交网络适合采用图数据库,而结构化数据适合采用关系数据库;其次,微服务系统对外提供了众多的服务,系统的可组合性好,业务变化时能轻易组合服务实现;再次,微服务的可替代性、弹性、可扩展性都很好,服务可以独立替换,每个服务可以内置自己的降级限流方案,也可以独立扩展性能,方便调整系统的整体处理能力。

        微服务虽说有很多好处,但也有很多挑战,首先,几乎所有业务需求都需要通过服务的编排组合实现,服务间的通讯开销可能影响性能,同时数据的一致性、可靠性等都可能受影响;其次,运维成本高,相对单体应用,微服务数量众多,每个微服务都需要独立部署,运维监控、运行成本高昂;再次,自动化部署的要求,服务间依赖关系的管理,服务依赖的测试都是挑战,需要妥善解决。

        微服务架构只是一种理念,具体的实现框架技术中,Springloud 无疑是最为成熟的,Spring 生态强大的集成能力体现无疑,微服务各方面的需求都有对应的组件能满足,如服务网关 Zuul、注册中心Eureka.容错降级 Hystrix、客户端负载均衡 Ribbon、配置中心 Springcloudconfig等,为微服务系统开发提供了全面的支持,除此之外,基于阿里巴巴开源的 Dubbo 服务治理框架也是一种选择,相对来说它没有那么全面的组件支持,但国内应用此框架较多,经历过互联网企业巨大流量的历练,框架成熟度较高。

         2017 年10 月,我被任命为系统架构师参与 XXX运营商AOP 系统的架构升级工作负责架构升级方案制定,组织架构升级工作实施,本次架构升级的目标是提高系统的性能扩展能力和可靠性,为互联网营销活动提供支撑。该系统是 XXX 运营商面向互联网销售产品的系统,目前承载了宽带业务订购、存费送费活动、流量包订购等业务,其中流量包订购业务占据总体业务量的绝大部分,月底订购高峰时日订单量超过10万笔,客户对系统现状较为满意,希望能通过系统进行互联网营销活动,如红包、满减、直降、抢购等大家都知道这些营销活动时用户请求将呈现指数级增长,我们评估目前的系统架构难以支撑此类需求。

        当前系统是基于轻量级J2EE 架构,大体上可分为两个子系统,订单处理子系统和接口子系统,因运营商的业务复杂、支撑系统众多,简单的流量包订购业务涉及多达 6 个系统提供的近 10 个接口,订单处理子系统的一部分工作就是调度后端系统接口完成业务需求;两个子系统通过 Dubbo 服务治理框架交互,订单处理子系统和接口子系统都是单体系统,分别部署了3 个和5个节点,数据库为 2台双机热备,前端接入采用一台 nginx反向代理。

        分析完系统现状后,我们分析了影响系统可靠性、扩展性的薄弱点:1、nginx 的单点失效风险;2数据库的性能瓶颈; 3、单体应用中的服务雪崩风险,服务间未做隔离,很容易一个服务的问题影响到整个系统;4、快速交付要求下的系统部署风险,客户要求支持每周进行营销活动,目前架构下单体应用没有时间经过充分测试。

        以上薄弱点中,nginx失效风险可以增加 nginx 节点,前置负载均衡器解决;数据库性能瓶颈可通过订单处理异步化部分解决(只能缓解,仍存在瓶颈);服务雪崩和快速交付风险,甚至数据库瓶颈,我们考虑可以通过微服务架构解决。

        微服务架构可以很完美的实现服务隔离,可以从物理上隔离服务占用的资源,配合降级机制可以较完美的解决服务雪崩风险;此外,配合良好的 DevOps 工具链,微服务系统可以单独发布影响到的服务,影响范围很容易控制,而营销活动时基本上都是独立开发一个或少数几个附加服务,对整体逻辑基本不影响,能很完美的达成快速交付目标,最后,进行促销活动的一般只有流量包等热点业务,微服务架构下我们可以将这些热点业务的订单数据库独立出来,甚至营销活动的服务独立数据库,然后通过 binglog 将订单数据同步到全订单库。

        确定好微服务架构思路后,我们评估了当前微服务架构实现方案,出于平滑过渡、保护原有投资、工期等因素,最后我们决定采用Dubbox方案实现,Dubbox 是当当网基于Dubbo2.5.3 继续开发的,增加了Restful、Kyro等协议支持,具体设计方案及迁移路线图如下:
1、Dubbo2.5.3迁移到 Dubbox2.8.4,经灰度环境全面测试正常后,迁移生产环境
2、构建容器环境:当前系统是运行在云平台上的,但云平台未提供容器服务,向运营商云平台申请资源,与云平台协商,提供预装了容器环境的虚拟机镜像,我们项目新申请的资源统一使用此镜像3、搭建 Jenkins 工具链,测试 DevOps 自动化部署、自动化构建流水线,培训运维、开发人员掌握Devops模式的开发部署流程,配合容器化环境实现性能高效扩展。
接口子系统拆分,在建立上述基础设施后,基本按每个接口一个服务方式拆分,同时每个服务内置4、超时处理和降级措施;因接口的逻辑相对简单,比较容易切分,考虑到处理性能且不直接对外,服务通过高效的 kyro 协议交互。
5、订单子系统拆分,订单处理逻辑较为复杂,因此只考虑把热点业务拆分,每个热点业务的订单处理独立服务,本期只有流量包业务;且独立数据库,订单处理异步化,收单先入库到 redis 中,同时记录文件日志以防万一时补偿;订单处理过程全部在通过 redis 进行,同时另开同步线程池将脏订单数据入库到订单库:处理完的订单及时从 redis 中清理,以降低 redis 持久化的开销;最后基于阿里巴巴 Canal 将订单表同步到总订单库中。

        按上述思路输出设计方案后,我们召集内外部专家、客户一起评审,大家基本认可此方案,补充部分细节后,经过近 2个月的实施,系统成功上线,上线 2 年来,系统运行稳定,扩展性、可修改性、灵活性、可靠性、交付速度都得到大幅提高,得到客户一致好评,团队也经此一役得到锻炼,此后的微服务系统实施更为得心应手。

        此项目的设计过程让我深深体会了架构师就是在各种方案间权衡这句话,要达到架构升级的目标不止这一种方案,不采用微服务,通过线程池隔离+异步处理+数据库集群也能基本解决问题,实施工期、实施风险也要小一些,但解决问题不够彻底,且难以达成客户提高交付速度的要求,但若工期、成本不允许的话也可能采用这种方案。通过此项目更能认识到架构师宽广的技术视野非常重要,要不断学习,跟进技术发展,以设计出更适合的架构,为各方创造最大价值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/744600.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SAP消息号 VF028

客户在VF11冲销发票之后,没有生成正式的财务凭证,然后VF02的时候出现如下报错: “自动清算出具发票凭证XXXXXXX(被冲销凭证号)且不可能取消凭证XXXXXXX(冲销凭证号) 原因:销售订单2…

小程序下拉刷新,加载更多数据,移动端分页

文章目录 页面结构图WXML页面代码js代码wxss代码总结备注 参考&#xff1a;https://juejin.cn/post/7222855604406796346 页面结构图 一般页面就4个结构&#xff1a;最外滚动层、数据展示层、暂无数据层、没有更多数据层。 如图&#xff1a; WXML页面代码 <scroll-view …

[吃瓜教程]南瓜书第3章对数几率回归

第三章 对数几率回归 3.1 算法原理 对数几率回归&#xff08;Logistic Regression&#xff09;是一种统计方法&#xff0c;主要用于二分类问题。它通过拟合一个对数几率函数&#xff08;logit function&#xff09;&#xff0c;即对数几率&#xff08;log-odds&#xff09;与…

oracle 11g rac创建实例时发现只给一节点创建了实例 二节点没创建的处理方法

由于操作失误没有在二节点创建实例 删除数据库重新dbca建库 [oracleracdg1-1 dbs]$ dbca -silent -deleteDatabase -sourceDB rac11dg1 -sysDBAUserName sys -sysDBAPassword oracle_4U Connecting to database 4% complete 9% complete 14% complete 19% complete 23% …

常见网络攻击威胁分享

今天我来分享一下比较常见的网络攻击形式&#xff0c; ARP 欺骗攻击、CC 攻击和 DDoS 流量攻击是较为常见且危害巨大的攻击方式。 一、ARP欺骗攻击 ARP&#xff08;AddressResolutionProtocol&#xff0c;地址解析协议&#xff09;是用于将IP地址转换为MAC地址的协议。ARP欺骗…

ActiViz集成到WPF中的空域问题

文章目录 一、场景1、WPF控件2、集成ActiViz或者VTK 二、问题1、需求2、空域问题 三、解决方案1、用WindowsFormsHost包裹住ElementHost&#xff0c;然后将WPF的控件放在ElementHost职中&#xff1a;2、用Window或者Popup去悬浮3、使用第三方库Microsoft.DwayneNeed&#xff08…

springcloud-gateway 路由加载流程

问题 Spring Cloud Gateway版本是2.2.9.RELEASE&#xff0c;原本项目中依赖服务自动发现来自动配置路由到微服务的&#xff0c;但是发现将spring.cloud.gateway.discovery.locator.enabledfalse 启动之后Gateway依然会将所有微服务自动注册到路由中&#xff0c;百思不得其解&a…

NineData和华为云在一起!提供一站式智能数据库DevOps平台

以GuassDB数据库为底座 NineData和华为云一起 为企业提供 一站式智能数据库DevOps平台 帮助开发者 高效、安全地完成 数据库SQL审核 访问控制、敏感数据保护等 日常数据库相关开发任务 NineData 智能数据管理平台 NineData 作为新一代的云原生智能数据管理平台&#xf…

Js逆向爬虫基础篇

这里写自定义目录标题 逆向技巧断点一 、请求入口定位1. 关键字搜索2. 请求堆栈3. hook4. JSON.stringify 二、响应入口定位&#xff1a;1. 关键字搜索2. hook3. JSON.parse 逆向技巧 断点 普通断点 条件断点 日志断点 XHR断点 一 、请求入口定位 1. 关键字搜索 key关…

【因果推断python】57_The Difference-in-Differences 3

目录 3) Enlightenment: A Flexible Functional Form Key Concepts 3) Enlightenment: A Flexible Functional Form 有好消息也有坏消息。首先是好消息&#xff1a;我们已经发现问题与函数形式有关&#xff0c;因此我们可以通过修正函数形式来解决这个问题。也就是说&#xf…

竞赛选题 python+大数据校园卡数据分析

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于yolov5的深度学习车牌识别系统实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;3分 该项目较为新颖&am…

短视频最佳时长:成都柏煜文化传媒有限公司

探索时间与内容之间的完美平衡 成都柏煜文化传媒有限公司 在数字媒体日益繁荣的今天&#xff0c;短视频已成为人们获取信息、娱乐休闲的重要形式。然而&#xff0c;关于短视频的最佳时长&#xff0c;一直是一个备受争议的话题。本文将探讨短视频时长的各种考量因素&#xff0…

基于MATLAB对线阵天线进行道尔夫—切比雪夫加权

相控阵天线——基于MATLAB对线阵进行道尔夫—切比雪夫加权 目录 前言 一、阵列天线的综合 二、道尔夫—切比雪夫综合 三、单元间距的改变对切比雪夫阵列方向图的影响 四、单元数的改变对切比雪夫阵列激励分布的影响 五、副瓣电平SLL对切比雪夫阵列激励幅度的影响 六、副…

深入理解Java中的Collectors(Stream流)

引言 在 Java 的 Stream API 中&#xff0c;Collectors 是一个非常强大的工具类&#xff0c;它提供了许多静态方法&#xff0c;用于将 Stream 的元素收集到集合、字符串或其他类型的结果中。使用 Collectors&#xff0c;我们可以轻松地进行数据聚合和转换操作。 文章目录 引言…

小区业主管理系统

摘 要 随着城市化进程的加速和人口的不断增加&#xff0c;小区的数量也在不断增加。小区作为城市居民居住的主要场所&#xff0c;其管理工作也变得越来越重要。传统的小区业主管理方式存在诸多问题&#xff0c;如信息传递不畅、业务处理效率低下等。因此&#xff0c;开发一个高…

Spring底层原理之FactoryBean Bean工厂 单例对象 多例对象

FactoryBean 在 Spring Framework 中&#xff0c;FactoryBean 是一个用于创建其他 Bean 实例的特殊工厂 Bean。它允许开发者自定义 Bean 的创建逻辑&#xff0c;从而更加灵活地管理和配置 Bean 的实例化过程。 FactoryBean 接口 FactoryBean 接口是 Spring 框架中的一个重要…

启动VMWare虚拟机报错

1. 无法打开内核设备“\\.\VMCIDev\VMX”: 操作成功完成。是否在安装 VMware Workstation 后重新引导? 模块“DevicePowerOn”启动失败。 未能启动虚拟机。 解决办法: 解决办法: 将 Ubuntu 64 位.vmx 找到vmci0.present"TRUE"这行改成 vmci0.present "FAL…

【AI编译器】triton学习:矩阵乘优化

Matrix Multiplication 主要内容&#xff1a; 块级矩阵乘法 多维指针算术 重新编排程序以提升L2缓存命 自动性能调整 Motivations 矩阵乘法是当今高性能计算系统的一个关键组件&#xff0c;在大多数情况下被用于构建硬件。由于该操作特别复杂&#xff0c;因此通常由软件提…

fail2ban自动屏蔽之jumpserver

fail2ban是一款实用软件&#xff0c;可以监视你的系统日志&#xff0c;然后匹配日志的错误信息&#xff08;正则式匹配&#xff09;执行相应的屏蔽动作。 jumpserver是一款开源堡垒机&#xff0c;其拥有一定的防护登录&#xff0c;也可以做登录限制&#xff0c;但是相对于防火…

湖南(用户画像)源点调研 适用于新产品开发的市场调研方法

湖南&#xff08;上市验证调研&#xff09;源点咨询认为&#xff1a;其实市场与用户研究的方法不管都什么花哨的名头&#xff0c;本质上只有两种&#xff1a;定量与定性。而对于新产品的开发最重要的就是掌握好定性的研究方法。 问&#xff1a;对于新产品开发我们面对的是什么…