架构,又称软件架构,是指对软件整体结构和组件的抽象描述,是软件设计和开发的方法论。架构类似于建筑物的基础,它的合理性和坚实性直接影响着整个项目的稳定性和成功。以下是一些典型的软件架构:
- 单机架构:所有功能都实现在一个进程中,部署在一台机器上。简单但不适用于高并发和需要高可用性的情况。
- C10k问题:关注如何处理1万个并发连接的问题,引发了网络套接字优化和服务端调度的研究。
- 单体架构:对单机架构的改进,通过多台单机和分流环节实现水平扩容,提高了处理能力。但存在职责过多和爆炸半径大的问题。
- 垂直应用架构:将系统按服务拆分任务,提高了开发和运维效率,但仍存在功能过于琐碎的问题。
- SOA(Service-Oriented Architecture)架构:将应用功能抽象为服务,定义服务间通信标准,实现了细分职责。但引入了数据一致性、高可用性、治理等新问题。
- 微服务架构:是SOA架构的去中心化演进,减少了服务之间的沟通消耗,实现了水平切分。但也带来了数据一致性、高可用性、治理和解耦等问题。
- 云计算技术:提供IaaS、PaaS、SaaS和FaaS等服务,改变了基础设施管理和资源分配的方式。
- 云原生技术:支持弹性资源调度和存储资源,促进了可扩展性和灵活性。
- DevOps:通过自动化流程提高软件开发和交付的效率,包括敏捷开发和持续集成/交付。
- 微服务架构:实现业务功能单元的解耦,采用HTTP或RPC通信标准,但需要考虑性能、服务治理和解耦等问题。
- 服务网格:实现业务与治理的结构和异构系统的统一治理,提供复杂的治理能力。
企业级后端架构面临的挑战包括资源有限、网络通信开销大、异构环境下性能不均等问题。为优化这些问题,可以采用离在线资源池、亲和性部署、流量治理、CPU水位负载均衡等策略。
最后,架构应根据需求、业界调研、技术选型和异常情况合理设计,并随着软件体量的增长进行动态调整,没有最佳的架构,只有最适合的架构。