本文是 serverless 入门与实践 的第39篇
学习<华为 Serverless 核心技术与实践>, 计划: 1篇前言 + 10篇/章 + 1篇总结
翻译服务Serverless架构
多视图的软件架构是软件架构设计文档中的重要组成部分。它不仅是一种架构归档的方法,还是一种架构设计的思维方法。按照视图划分软件,通常采用4+1视图方式,即逻辑视图、开发视图、部署视图、运行视图和用例视图。
对于翻译服务,逻辑视图非常重要,我们需要按照业务功能进行领域建模。领域建模的方法非常多,可以基于业务经验进行建模,也可以利用一些标准的领域驱动设计技术,如DDD
按照架构分层设计的理念,我们首先完成翻译服务的零层和一层架构设计,然后结合DDD的设计方法,完成翻译服务的领域对象设计、限界上下文和业务子域划分,最后根据业务子域和限界上下文划分函数。
功能架构
翻译服务零层架构
翻译服务一层架构
函数划分策略
结合业务特点,利用领域建模的方法对翻译函数进行划分
划分方法-函数的划分总体上遵循“高内聚、低耦合”的原则,同时结合翻译服务的业务特点,以及团队人员技能等因素综合确定划分方法:
- 按照角色进行划分,每个角色对应1个或多个函数。
- 按照业务领域划分,每个限界上下文和业务子域对应1个或多个函数。
- 按照性能、可靠性等进行拆分,通常的划分维度包括:批量操作或单个操作,内部使用的运营管理类功能或面向用户的业务功能等。
- 按照功能重要性进行划分,将核心业务和非核心业务分开,保障服务SLA和可靠性。
函数划分方法
主流程梳理
- 开发者业务主流程
- 翻译服务商业务主流程
- 平台管理员业务主流程
进行领域建模时,事件风暴是一个比较实用的工具,通常包含产品需求、场景分析等
领域建模-翻译服务业务域划分示例
技术架构
翻译服务领域模型示例
关键架构质量属性设计: 性能设计准则
通过在距离函数最近的位置提供本地缓存
同步编程接口调用编程比较简单,串行化编程比较容易理解,但是其缺点也比较明显。
- 业务线程利用率低
- 纠结的超时时间
- 雪崩效应
可以通过异步调用来解决同步调用导致的阻塞和资源使用率低的问题,异步调用会在一定程度上增加编码和问题定位的复杂性,因此推荐在适用的场景下使用异步调用。
通过缓存、异步等技术可以将单点的性能优化到极致
云数据库弹性扩容架构
关键架构质量属性设计: 可靠性设计准则
业务域的可靠性主要依托云函数服务自身的可靠性来保障。
- 双云双活,ELB/SLB自动切换流量。
- 函数平台基于微服务构建,微服务无状态,可随意启停替换,不影响业务函数实例对外服务。
- 业务函数实例故障,函数平台负责自动重启实例。
- 函数间容器隔离,故障互不影响。
- 心跳检测机制,基于健康检查结果,请求只分发健康的实例。
关键架构质量属性设计: 安全性设计准则
提供的主要安全能力包括以下几个方面
- 接入安全:App、用户和服务三重认证;基于角色的权限管理;不同的租户使用不同的Database,保证数据隔离。
- 数据安全:云端数据存储自动加密;端云全密态数据管理。
- 攻击检测与系统韧性:防SQL注入;过载检测与流量控制;系统审计。