1. 架构设计的模型简介
目前常见的服务架构设计,主要分为:
- 存储型架构:以存储为核心,关注高性能的读写、一致性的保证、可弹性的容量伸缩等等
- 计算型架构:以计算为核心,结合并行化、调度技术、缓存等,优化服务的吞吐、延迟等等。
很多场景下服务架构是可以实现存储、计算的分离,从而实现专项优化、极限优化(比如pulsar等),但是对于某些特殊场景,需要一体化的存储+计算。比如搜索场景,它的场景特点有:
- 全扇出的并发模式:搜索场景是Query到Doc的映射,需要经过语义解析、构建检索表达式、扇出所有的分片服务、合并结果,而常规场景下的Key/Value查询,可以通过Hash关系实现精准的扇出。
- 高性能和低延迟:在线检索的延迟要求是毫秒级。
如果分离了计算和存储,那么拉链召回和归并的过程,在全扇出的并发模式下,延迟会变得不可控。对于这类存储+计算型的架构暂定义为【数据架构】或者数据密集型架构,它主要的关注点是:
- 弹性的容量伸缩
- 计算和存储资源的均衡(均需分配)
- 性能优化相关
- …
需要兼顾存储和计算两个方面
2. 数据架构模式如何设计?
如果你对数据架构或者百度搜索技术:
- 数据量暴涨情况下,如何快速实现数据层的弹性伸缩?
- 对延迟和性能要求比较苛刻的条件下,如何实现资源的按需分配?
- 分布式检索场景下,如何优化关联计算(分布式Join)的性能?
- 如何管理百亿级的索引数据?
- 如何支持更大数据量级的检索?
感兴趣的话,可以看看这篇文章:
https://mp.weixin.qq.com/s/JZZXktYSSccbCPOrR6Ss_Q
Topic主要涉及的是数据架构的云原生、弹性计算、进阶云原生的相关技术,感兴趣的同学看看。目录索引为:
3. 架构设计的核心要素
架构设计中最核心的5个要素:
- 稳定性:如何保证系统的稳定性?(降低出问题的概率,为企业省钱)
- 成本:如何优化资源成本(为企业省钱)
- 效率:如何提高研发效率、迭代效率等等(增加企业竞争力、节省成本)
- 性能:如何提升系统的响应速度(增加企业竞争力、更好的体验、更多的收入)
- 时效性:比如资讯类消息如何更快传播到用户那边?(类比百度、头条,增加企业竞争力)
九九归一,架构最核心的两点:为企业省钱 & 增加企业收入。
4. 架构设计的一般流程
1. 需求调研:明确要解决的问题和预期要达成的目标,解决真实存在的问题,而不是实现臆想中的架构。
2. 确定目标:清晰且合理的目标是影响架构能否成功的关键,以终为始。
3. 方案设计、技术选型:为了达成预设的目标,方案设计会受人员背景、开发环境、公司层面等因素影响,需要结合当前环境下的各个因素,做最优的方案选型。
4. 分工和排期:确定方案选型后,需要进一步拆解方案,进行人员分工、确定交付计划。
5. 持续性交付:为什么说持续性交付?架构更迭有时是一个漫长的过程,由于某些管理因素、顺利达成最终的目标,建议要有持续性、阶段性的产出。
6. 复盘:定期开展复盘,回顾进展、及时纠正一些非预期的问题。
5. 个人思考
关于架构设计相关
- 没有最好的架构设计,只有当前背景下最优的解决方案。
- 每个架构都有它的设计边界,当跨越这个边界时,衍生的问题会成倍增长。
关于解决问题相关
解决思路有时比解决方法更重要,解决方法需要依赖特定的时空条件,而解决思路可以超越时空、迁移,类似于方法论的东西。
我们读技术文章、书籍的时候,除了关注特定场景下的解决办法外,还需关注一下作者解决问题背后的思路,这样在遇到其他相似问题时,实现技术方案的迁移。