从零开始学习架构笔记

208 阅读6分钟

1.架构的目的

架构的目的就是为了解决软件中的复杂度带来的问题

2.复杂度的来源

1)高性能:单机高性能带来的复杂度,集群高性能带来的复杂度
2)高可用:计算高可用的复杂度,存储高可用复杂度
3)可扩展性:预测变化的复杂度,应对变化的复杂度
4)低成本、安全、规模:功能安全,架构安全,功能越多关系多复杂度就高,数据量越来越大复杂度就高了

3.架构设计的三原则

合适原则(合适优于高大上),简单原则(简单由于复杂),演化原则(演化优于一步到位,迭代,随着发展演化来升级架构)

4.架构设计流程

1)识别复杂度(定位需要设计什么样的架构,明确目标)
2)设计备选方案:设计3个左右的备选方案,列出优缺点等
3)评估和选择备选方案:对比性能、复杂性、成本、高可用、可维护性、可测试性等方便拍好优先级,选取方案
4)详细方案设计:细化方案,设计方案落地

5.高性能架构模式

5.1 高性能数据库集群:读写分离(分散了读写压力,存在问题:主从延迟,多数据源路由),分库分表(分散了存储压力,业务分库,数据分表(水平分表:分数据,垂直分表:分字段),存在问题:join问题,事务问题,成本问题,路由问题,order by问题)
5.2 高性能nosql:kv存储(resdis),文档数据库(mongdb),列式数据库(hbase),全文搜索数据库(es)。
5.3 高性能缓存架构:缓存穿透,缓存雪崩(缓存大量同时失效,同时多个线程生成缓存,解决:独立后台线程更新缓存),缓存热点(分散存储)
5.4 单服务器高性能模式:ppc(每次连接请求一个进程),tpc(每次连接一个线程),每次使用后就要关闭,资源不能复用,浪费率高。
reactor(io多路复用+连接池,dispather的处理方式),proactor(异步处理的reactor)
5.5 高性能负载均衡:DNS负载均衡(地域级别的负载均衡),硬件负载均衡(集群级别的负载均衡),软件负载均衡(机器级别的负载均衡)

6.高可用架构模式

6.1 CAP理论,ICAD, BASE
6.2 故障分析,故障的预计和产生的问题,设计相应的解决方案
6.3 高可用存储架构:双机架构,集群和分区
6.4 如何设计计算高可用架构:主从,主备,集群
6.5 业务高可用:异地多活,降级(后台降级,系统级降级,内部的处理的降级,系统层面,丢卒保帅),限流(用户侧流量来限制),熔断(外部服务超时等异常的熔断),报警

7.可扩展架构模式

7.1 可扩展架构基本思想和模式:拆,面向流程的拆分(分层架构),面向服务的拆分(soa,微服务),面向功能的拆分(微内核架构)。
7.2 传统的可扩展架构模式:分层架构,soa
7.3 深入理解微服务架构
微服务的粒度,调用链,服务治理等
7.4 微服务架构实践
拆分粒度:三个人一个微服务
拆分方法:基于业务来拆分,基于可扩展拆分(稳定和不稳定的分开),基于可靠性拆分(核心和非核心的分开),基于性能的拆分(例如活动独立出来),实际是基于这几种综合拆分的。
基础设施:服务治理,自动化部署配置等,服务发现,服务路由,服务跟踪,服务监控,服务容错,服务安全,网关,接口框架,配置中心,自动化部署,自动化测试。
7.5 微内核架构

8.架构实战

8.1 架构师如何判断技术演进的方向:依赖企业的业务发展
技术演进的动力:
1)产品类业务(如苹果手机等,靠功能吸引用户,所以开始是技术推动业务发展,不过随着业务的发展,还是业务来拖动技术发展的)
2)服务类业务(如微信,淘宝,靠的是整套服务吸引用户,用户粘性大,导致规模大,促进技术升级,所以是业务推动技术发展)
技术演进的模式:根据业务实际情况选择技术,可以借鉴大厂成功模式,不过设计时要结合业务发展、人力成本等多种因素选型,可以做个缩小版的,或者部分技术的选取,或者几个适合的技术的组合。
8.2 互联网技术发展
处理的问题:复杂性,用户规模
复杂性不同的发展期不同,初创期,发展期,竞争期,成熟期。
用户规模也是随着业务发展不断增加的。性能要求越来高,可用性要求越来越高。
8.3 互联网架构模版
1)存储层技术:sql,nosql(redis,mongdb,es),小文件存储(数据小,数量巨大,访问量巨大,hbase,fastdfs,hadooptfss
TFS等), 大文件存储(视频电影,日志,Hadoop,hive,storm)
2)开发层和服务层技术:开发框架,web服务器,容器,配置中心,服务中心(服务名字系统,服务总线系统),消息队列
3)网络层技术:负载均衡(dns(地域级),nginx(机器级),lvs,f5(集群级)) ,CDN(加速器),多机房(灾备),多中心
4)用户层技术,业务层技术:用户管理,消息推送,存储云图片云,业务要拆分。
5)平台技术:运维平台(配置,部署,监控,应急等),测试平台(单元测试,集成测试,自动化测试,功能测试,接口测试,性能测试等),数据平台(数据管理,数据分析,数据应用),管理平台(权限管理,身份认证,权限控制等)
8.4 架构重构心法
有的放矢,选取优先级高的重构,分清主次,找到主要病根,是架构问题就重构架构,如果优化就能解决就不要重构,有些优化在重构后能更有效地处理。合纵连横,沟通协调,和上下游业务等相关人员沟通好重构对对方的利好,推动重构有序进行,根据优先级、重要程度、实施难度分步实施。架构重构分阶段有序重构方式:优先级排序,问题分类,先易后难。
8.5 开源项目的选型、使用和二次开发
开源项目的选型:聚焦于是否满足业务,聚焦是否成熟(版本号,使用公司数量,社区是否活跃),聚焦运维能力(日志是否齐全,后台管理是否有,故障恢复重试功能是否有)。
开源项目如何使用:测试,灰度发布,应急预案。
开源项目的二次开发。