关于架构设计的一些思考

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. 个人思考

关于架构设计相关

  1. 没有最好的架构设计,只有当前背景下最优的解决方案。
  2. 每个架构都有它的设计边界,当跨越这个边界时,衍生的问题会成倍增长。

关于解决问题相关

解决思路有时比解决方法更重要,解决方法需要依赖特定的时空条件,而解决思路可以超越时空、迁移,类似于方法论的东西。

我们读技术文章、书籍的时候,除了关注特定场景下的解决办法外,还需关注一下作者解决问题背后的思路,这样在遇到其他相似问题时,实现技术方案的迁移。