学后感【从0开始学架构】
用了差不多两个礼拜的时间学习了李运华老师的【从0开始学架构】,下面是我的学后感
架构设计的主要目的是为了解决软件系统复杂度带来的问题。复杂度的来源包含高性能,高可用,可扩展性,低成本安全和规模。集群高性能主要包含任务分配和任务分解;高可用包含计算高可用和存储高可用,高可用状态决策可以分为独裁式,协商式,民主式;可扩展性要预测变化和应对变化,比如分层;架构设计还要考虑低成本这与高可用高性能是冲突,需要协调好,安全也是架构必须考虑的因素,系统规模起来之后,量变引起质变,产生复杂度。
架构设计的三原则。合适原则,合适优于业界领先;简单原则,简单优于复杂;演化原则,演化优于一步到位。
首先识别系统的复杂度到底体现在哪块,在进行架构设计,需要设计3-5个备选方案,评估备选方案从性能,复杂度,硬件成本,可靠性,可运维性,人力投入角度,按优先级权重来评估,评估通过后设计详细方案。
高性能的数据库集群读写分离和分库分表。读写分离引入两个复杂度,主从复制延迟和分配问题,主从复制延迟可以将写之后的操作分配到主数据库或者从从数据库读失败,再读一次主数据库再或者关键业务都分配到主,非关键读写分离;分配问题主要分为程序代码封装和中间件封装(MYSQL Route,Atlas)。分库主要为业务分库,带来了join问题,事务问题和成本问题;分表分为垂直分表和水平分表,垂直分表将一个大表拆分为小表,水平分表适合表行数特别大的表会带来路由,join,count,order by问题,路由包含范围路由,hashl路由和配置路由.NoSQL分为key-value存储,文档存储,列模式存储和全文搜索引擎。
缓存,缓存穿透,缓存雪崩。为数据库不存在的值设默认值,后台更新缓存,更新缓存设置锁
Reactor模式。
负载均衡:DNS(适合不同地域级别),F5(集群级别,性能高),Nginx(机器级别,7层,支持HTTP)/LVS(机器,4层,协议灵活,支持聊天,数据库等),负载算法:轮询,加权轮询,负载最低,性能优先,hash(session)。
CAP,BASE,软状态,最终一致性。
高可用存储,双击分为主备和主从,主从如何切换。异地多活。
可扩展,从业务流程,服务流程,功能流程拆分,分层思想,微服务、微内核。