(大型)应用平台的基础架构,笔记摘录自---极客时间 李运华 从0开始学架构。
0、首先是架构模型:
1、存储层
可以分成两类,SQL数据库,NoSQL数据库。
SQL:一般使用MySQL。业务到一定规模后,需要分库分表。这个要自动化,实力雄厚的大公司此时一般都会在 SQL 集群上建 SQL 存储平台,以对业务透明的形式提供资源分配、数据备份、迁移、容灾、读写分离、分库分表等一系列服务,例如淘宝的UMP (Unified MySQL Platf, rm) 系统。
NoSQL:一定规模后,同样会有分库分表问题。需要封装成存储平台,方便使用。
小文件存储:一般就使用开源平台,起步时使用云平台更方便。
2、开发层(类似于底层操作系统平台)
尽量选择问题域内成熟框架、和开发语言关联的服务器。
开发框架:一般和解决的业务问题、使用的开发语言关联。例如:SSH、ThinkPHP等。公司内针对同一问题域应统一.
服务器:web服务器等
容器:虚拟机虽然跨平台,但并不如Docker在互联网领域真正得到广泛应用。
3、服务层(支撑服务,而非业务服务)
配置中心、服务中心、消息队列(如Kafka)。
开发层+服务层 ,应该叫公共支撑或支撑服务层,有点类似于SOA中的ESB。
4、网络层(参见高可靠性、可用性扩展设计)
a、负载均衡:保证性能和可用性。常见方案:DNS(HTTP-DNS),其实可以理解成根据IP地址hash来分配业务量;
Nginx、LVS等软件均衡方案;F5等硬件方案。
b、CDN
c、多机房/多中心
5、用户层、业务层
a、用户管理:单点登录技术 / 第三方接入-授权登录 b、消息推送:一般用开源的 c、存储云、图片云:针对小图片存储。
6、平台技术
a、运维平台:
运维平台核心的职置分为四大块:配置、部署、监控、应急。
运维平台的核心设计要素是 “四化”:标准化(不相同的系统,封装成规范接口)、平台化(不同系统的不同操作尽量集成到一个运维系统,该系统就是运维平台)、自动化(自动采集、归总、刷新)、可视化(仪表盘)
b、测试平台:自动化、对相关的用例、资源、数据和测试管理集成到一起。
c:数据平台:采集、管理分析、应用等集成到一起。
d:管理平台:核心就是权限管理,实质是身份认证、权限控制。