付钱拉金融云系统架构演进和最佳实践
运营后台 用户系统 商户后台 官网 企业网银 个人网银 解决方案 实时监控 业务属性 BUSINESS ATTRIBUTES 实时性、一致性 安全性、中间账户 聚合的复杂性、第三方依赖性 金融系统 The complexity of aggregation, third-party dependency Financial system Security, intermediate 5.和第三方接口交互,需要考虑是否要相互添加白名单 6.和第三方接口交互,需要考虑设置合适的work线程符合第三方并发数量限制 二 安全规范 1.页面请求参数严格限制或者校验处理,防止SQL注入 2.页面URL请求做细粒度的权限拦截,防止访问权限过大 3.部署在公网的应用做好防止XSS攻击的防范措施 4.和第三方系统交互需要互加白名单确保安全 5.系统全站提供HTTPS服务 6.和第三方系统交互报文需要加密传输0 码力 | 35 页 | 6.05 MB | 1 年前3刘道平-从0到1,移动政务应用小程序系统架构演化
1、仅开放指定端口 80 443 2、域名须有HTTPS证书 3、白名单 13、安全渗透测试、运维监控 -- 确保系统稳定 一、业务应用上线前必须经过安全渗透测试。 1、在测试环境中扫描出:越权查询、SQL注入、明文传输等,要求整改 2、正式环境检查: 操作系统、数据库、中间件漏洞,建议打补丁 二、运维监控每日 1.采用ELK收集系统日志、监控异常信息 2. 对各业务系统API接口进行状态监控,每日输出报告0 码力 | 35 页 | 15.60 MB | 1 年前3领域驱动设计&中台/可视化的遗留系统微服务改造
商户履履⾏行行订单 订单 商品 1. 订单 2. 商品 3. *** 明确服务的范围 明确核⼼心模型 明确服务包含的数据表 可视化的拆解遗留留系统 微服务架构、绞杀模式、代码依赖分析、数据库依赖分析、 遗留留系统拆解评分表、降⻰龙⼋八步 庖丁解⽜牛拆解的最⾼高境界 了了解⽜牛的⽣生理理构造 避开筋腱⻣骨节交错的组织 从⻣骨节的缝隙下⼿手 ⼗十九年年⼑刀依然锋利利 再看⼀一眼微服务架构 business. ⾯面对巨⼤大复杂的遗留留系统, 我们该如何开始拆解? 代码依赖模式 我们推荐以模块(java包)为基本单位,从代码依赖的⻆角度看,有三种模式: package A class X { public void foo(){ Y.bar(); } } 依赖其他模块 package B class Y { public void bar(){} } 被其他模块依赖 package A class X { public void foo(){} } 独⽴立存在 Structure101代码依赖分析 可视化代码地图 ⾃自动分析每⼀一层级 包/类之间的依赖⽣生 成可视化表格 Structure101代码依赖分析 具体依赖细节 Structure101代码依赖分析 可以将包/类进⾏行行0 码力 | 54 页 | 3.85 MB | 1 年前3降级预案在同程艺龙的工程实践-王俊翔
如何设计⾯面向容错的系统,如何提升系统的可⽤用性 强弱依赖 • 弱依赖 - 熔断限流,有损服务 • 强依赖 - 备选服务,降级实现 什什么是强弱依赖,如何确定强弱依赖 • ⽤用户是否强烈烈感知 • 核⼼心业务是否有损 service ⽤用户请求 serviceB serviceA serviceC serviceC- degrade 弱依赖 强依赖 强依赖 备选服务 熔断、限流 降级 - 所有⾮非核⼼心服务降级 • 预案编排 • 根据链路路关系、同等级优先级进⾏行行预案编排, 形成降级执⾏行行链路路 • 线上实时预案测试、演练,演练数据回溯 业务不不断迭代,持续引⼊入新依赖,系统是否稳定可靠? 预案是否依然持续有效? 如何才能持续保障系统的⾼高可⽤用性? 故障演练 • 对预案进⾏行行有效性、合理理性验证 • 通过破坏性测试,发现系统的潜在故障,及时修正,并做好降级预防措施 & ASM vm.loadAgent(agent) 3. 加载Agent vm.attach(pid) Jetty ⼩小结 • 从⽤用户感知、核⼼心业务影响⽅方⾯面,判断系统链路路中的强弱依赖 • 通过对服务统⼀一管理理,从全局刻画系统链路路熔断降级点,结合策略略和预案,通过持续不不断的治 理理保障系统的可⽤用性 • 通过反复的故障演练,发现系统中的薄弱点,并进⾏行行有效的预防 •0 码力 | 26 页 | 18.67 MB | 1 年前3大规模分布式系统架构下调测能力构建之道
调测存在如下困难: 开发依赖重 联调成本高 变动把控困难 拆 应用拆分 数据拆分 团队拆分 分布式服务 API Gateway 分布式文件 分布式缓存 分布式消息 DB Cluster 连接 序列化 路由 负载均衡 … 问题示例 1. 我依赖一个远程服务,但在负责它的团队把它上线之前,我什 么也做不了 2. 我负责的功能依赖一堆的远程服务,为了本地调测,我必须从 4. 依赖的远程服务逻辑发生变化了,但负责它的团队没有通知到 我,结果上线后直接导致生产事故。 5. 我和其他团队共用一套分布式缓存服务,为了防止数据覆盖, 我只能和别人轮流排队上线调试,我等了一天,结果只能用一 个小时。 6. 我写了个消息Consumer,布到线上准备测测,结果,别人的消 息先到了,一下把我的预置数据全搞乱了… 7. 我的开发机性能还行,我想自己装一套依赖环境提高开发调测 效率,结果消息服务、缓存服务、服务框架装完一启动,80% 的系统资源就没有了,想想还有一堆的应用服务还没装,直接 泪崩… 8. 办公区断网,所有线上依赖环境都无法访问了,得,今天啥也 干不了了,回家洗洗睡吧…. … ….. ……… 1 2 3 解决之道:通过技术手段,降低系统对外部的依赖,而“MOCK”,是最 有效的手段。 分布式服务框架mock能力构建 应用 服务容器(Consumer) Filter0 码力 | 19 页 | 2.74 MB | 1 年前3分布式异地多活架构实践之路
讯飞输入法解决方案 • 实际应用效果 • 后续规划 技术挑战 几十毫秒的延迟; 跨机房性能较慢 机房天然延迟 专线费用高; 专线不稳定 跨机房专线问题 依赖小服务,有一 定改造成本; 依赖外部服务 服务依赖问题 减少对业务开发影响; 需要封装屏蔽细节 业务开发影响 如何精准调度; 如何合理调度 流量调度 存储系统自带同步 不成熟; 自研组件之间同步 数据同步 单点写,多点读) 非核心业务 老版本兼容服务、运营活动、配置、管 理平台、官网、论坛等 N/A 本地模式 (单点读写) 设计思路 核心业务异地多活 精准流量调度 数据同步 多元化 最终一致性 依赖关系优化 配套系统支撑 主 从 多 主 汇 聚 混 合 场景区分 封装屏蔽细节 容量合理规划 当前总体架构 合肥 北京 广州 HTTPDNS 智能DNS GSLB GSLB Servers 域的调度 结果:无法就近返回最优的机房IP、机房之间负载不均衡、机房异常后无法快速容灾 精准流量调度-全局 HTTPDNS LocalDNS 智能DNS 合肥IDC 北京IDC 广州IDC 弱依赖,可控 SDK封装: 重点域名预解析 缓存域名解析结果(sp、 wifi名) 出错或快过期异步解析 合法IP动态下发 IP请求结果统计 多级兜底容错 解析IP合法,IP请求 解析IP不合法,固定IP请求0 码力 | 36 页 | 1.66 MB | 1 年前3微服务和Service Mesh 在多个行业落地实践
开关 API 监控 认证 鉴权 治理 文档 报表 微服务框架 (服务治理) 服务 目录 注册 发现 限流 熔断 降级 容错 路由 负载 均衡 参数 分流 拓扑 依赖 配置 中心 服务 监控 服务 告警 认证 鉴权 统计 概览 知识 库 APM (应用运行期监控) 运行时 拓扑 性能 监控 服务 筛选 调用 链 调用 环境手动触发 持续集成 www.163yun.com 微服务框架 (服务治理) 服务 目录 注册 发现 限流 熔断 降级 容错 路由 负载 均衡 参数 分流 拓扑 依赖 配置 中心 服务 监控 服务 告警 认证 鉴权 统计 概览 知识 库 服务 告警 监控 大屏 账户 审计 注册,发现,调用都提供鉴权 认证鉴权 接口文档统一维护 API网关负责流量接入 www.163yun.com 微服务框架 (服务治理) 服务 目录 注册 发现 限流 熔断 降级 容错 路由 负载 均衡 参数 分流 拓扑 依赖 配置 中心 服务 监控 服务 告警 认证 鉴权 统计 概览 知识 库 服务 告警 监控 大屏 账户 审计 粒度更细:可指定服务版本,类,方法级别 配置灵活0 码力 | 39 页 | 3.06 MB | 1 年前3声明式自愈系统——高可用分布式系统的设计之道-王昕
State跟 Realized State之间的差 距,维持最终一致性 Ø 定期处理集群中的事件 Ø 系统必须是幂等的 控制器的设计理念 控制逻辑应该只依赖于当前状态 假设任何错误的可能,并做容错处理 尽量避免复杂状态机,逻辑不要依赖无法监控的内部状 态 每个模块都可以在必要时优雅地降级服务 每个模块都可以在出错后自动恢复 假设任何命令都可能被任何调用对象拒绝,甚至返回错 误结果 心跳异常 缓存热点 缓存限流 数据库热点 数据库宕机 数据库延迟 CPU 抢占 内存抢占 内存错乱 上下文切换 磁盘满 磁盘坏 网络抖动 网卡慢 断网 DNS 故障 系统单点 异步阻塞 依赖超时 内存溢出 不可读写 目录 Ø 分布式系统面临的高可用问题 Ø 设计和验证高可用分布式系统的工具与方法 Ø 设计和验证高可用分布式系统的案例分享 Ø 高可用系统的最佳实践总结 一个分布式消息系统的概念模型 不要有隐藏的内部 API Ø API 操作复杂度与对象数量成正比 Ø API 对象状态不依赖于连接状态 Ø 针对全局状态设计自愈容错机制 最佳实践分享 有关系统设计和运营 Ø 分开设计理想状态和实际状态 Desired State Realized State Ø 利用队列解耦系统 Ø 尽量不要依赖 DNS 做高可用 Ø 监控负载不均的情况 Ø 避免Self DoS 最佳实践分享0 码力 | 44 页 | 2.47 MB | 1 年前3领域驱动设计&中台/淘宝应用架构升级——反应式架构的探索与实践
架构升级的思考 现有架构的问题? 现有架构的问题 同步等待 • 现有同步模型,线程 多 load ⾼高 • 资源利利⽤用率 应⽤用本身的解决⽅方案? 并⾏行行度有限 • ⽆无法纯业务依赖并发 • 微服务化让问题更更凸 显 • RT 累积 RT 与 ⽤用户增⻓长 RT 累积带来成本 • 过早引⼊入 cache • 每个服务都在设置超 时 维护成本、业务实现复 远程调⽤用已经异步化,所以是已经且过 Scheduler • 可以⼿手⼯工切 Scheduler (subscribeOn / observeOn) 业务顺序编写 并发⽅方式执⾏行行 • 不不同的流 • ⽆无依赖 • 切过 Scheduler 就可以⾃自动并发 多流并发 • 业务按照语义顺序编写 • 更更友好的控制并发 维护性 和 性能 更更优! 优雅控制 processors.flatMap(processor reduce(0, (acc, data) -> acc + data); 流 - 性能 全异步、流式 CPU数个业务线程 更更少的上下⽂文切换、更更少(⽆无)的竞争、更更低的LOAD 业务等效依赖的异步并发 更更⾼高效的资源利利⽤用率 Universal Scalability Law 系统流⽔水线并⾏行行处理理 流 - 分布式 � ) �� �� �� �� �� �� ��0 码力 | 27 页 | 1.13 MB | 1 年前3领域驱动设计&中台/演进式架构的平台化落地
代码⽣生成引擎服务 依赖 框架模 板 微服务 ⼯工程 码云 U D U D DevOps平台 微服务契约测试平台 Sonar U D D U U D U D U D U D U D U D U D U D U D U D U D U D U D U D 系统 31 •服务定义 •服务间及与外部 系统依赖关系 •DDD对象模型 •⾃自动⽣生成服务代码与配置 34 服务地图 数据库演进 与版本化管理理 •数据库引⼊入Flyway等 •⾃自动⽣生成初始脚本库 •⾃自动化变更更DB 35 契约 • 契约定义(依赖、集成关系) • 契约变更更评审 • 契约变更更历史记录 • ⽀支持契约测试 架构演进守护 架构演进守护- 从契约反向识别实现与模型差异 领域演进守护- DDD领域模型的反向可视化0 码力 | 42 页 | 2.95 MB | 1 年前3
共 19 条
- 1
- 2