架构设计
Leon.ENV
Never Limit
展开
-
分布式CAP原理:一致性、可用性、分区容错
CAP概念单机系统由于所有的处理都在单机完成的,所以不存在数据一致性问题,但是如果系统崩溃了,就导致服务不可用。分布式系统可以实现服务的高可用,现有的大型网站几乎都是分布式的,特别是微服务的出现,使得分布式系统正变得越来越重要。分布式系统最大的难点,就是各个节点的状态如何同步。CAP原理给分布式系统的实现带来了指导思路,它也是理解分布式系统的重要理论。CAP由以下三个指标组成:C(Consistency):一致性A(Availability):可用性P(P...原创 2020-12-08 17:09:55 · 5078 阅读 · 2 评论 -
软件架构-里氏替换原则
里氏替换原则(Liskov Substitution Principle,LSP)是面向对象设计的基本原则之一。里氏替换原则认为:任何基类(父类或接口)可以出现的地方,子类(实现类)一定可以出现。 LSP是继承复用的基石,只有当子类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而子类也能够在基类的基础上增加新的行为为了更好理解这个原则,我们举两个例子(一个违反原则案例、一个符合原则案例)。违反原则案例:长方形和正方形从长方形和正方形的特性中,我们知道正方形也是.原创 2020-11-20 11:58:24 · 1863 阅读 · 1 评论 -
软件架构-开闭原则
开闭原则(Open Closed Principle, OCP)是Bertrand Meyer在1988年提出的,该设计原则认为:一个设计良好的计算机系统应该易于扩展(对扩展开放),同时抗拒修改(对修改关闭)。其实这也是我们设计软件架构的根本目的。如果对于小小的需求改动,而需要大幅度地修改整个软件架构,这种牵一发而动全身的设计显然是要避免的。下面,我们通过一个案例来对开闭原则做一些说明。案例: 电商交易日志系统假设我们要设计一个电商交易日志系统,用于记录用户的交易行为记录。如:用户.原创 2020-11-20 12:49:12 · 1785 阅读 · 0 评论 -
软件架构-接口隔离原则
接口隔离原则(Interface Segregation Principle,ISP)。ISP定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。案例说明直观认识ISP原则,直接上图:在图中所描述的应用中,有多个用户需要操作Ops类。现在,我们假设User1类只需要使用op1,User2类只需要使用op2,User3类只需要使用op3。在这种情况下,如果使用Java语言来实现,User1并不需要调用op2、op3方法,但是在代码层次上且与O..原创 2020-11-20 13:42:58 · 1858 阅读 · 1 评论 -
软件架构-单一职责原则
单一职责原则(Single Pesponsibility Principle, SRP)是SOLID五大设计原则最容易被误解的一个。也许是名字的原因,很多程序员根据SRP这个名字想当然地认为这个原则是指:每个模块应该只做一件事。但这只是一个面向底层实现细节的设计原则,并不是SRP的全部。对于SRP的描述是:任何一个软件模块都应该只对某一类行为者负责。大部分情况下,对于 “软件模块” 的简单定义就是一个源代码文件(如.java文件和.py文件等),也可以指一组紧密相关的函数和数据结构。对于 “行为者”原创 2020-11-20 13:48:57 · 1965 阅读 · 0 评论 -
架构设计-分而治之
生活中经常看到跟排序相关的例子,如:微博中排名前10的热点话题,学校中考试平均成绩排名前3的班级,NBA中比赛胜率排名前8的球队等。排序可以让重点数据凸显出来,从而更容易得到关注。开发中,我们也常遇到排序的问题,如对一个集合a(1),a(2),a(3),…,a(N)进行排序,然后取出前10个最大值。如果集合比较小,可以编写一段排序程序,并且在一台计算机上就可以快速执行完成。如果集合比较大(比如几十亿或几百亿个元素),这对一台计算机来说是非常吃力的,甚至无法完成计算。有一个比较好的方案是使用分治算法,先把一.原创 2020-11-20 14:16:02 · 1852 阅读 · 0 评论 -
架构设计-简单之美
我们遇到问题时,时不时会谷歌或百度一下,谷歌或百度能在毫秒级时间内响应结果网页,我们不禁会想谷歌或百度是不是使用了什么特别复杂厉害的算法,才能到达如此的快速响应。我们先看看建立一个搜索引擎大致需要做这样的几件事:自动下载互联网上的网页;建立快速有效的索引;根据相关性对网页进行公平准确的排序。一个高质量的搜索引擎要实现这3件事都不容易,但是呢,搜索引擎的基本原理还是相对简单的。我们平时使用的计算机可以处理复杂的逻辑计算,但其底层采用的是最简单的二进制计数方法,它只有两个数字:0和1。二进制除了是一种计数方法外原创 2020-11-20 14:13:18 · 1942 阅读 · 1 评论