软件架构设计-五视图方法论

软件架构设计-五视图方法论

閱讀本文約花費: 12 (分鐘)在实际工作中,我们经常听到“架构”和“架构师”这样的名词,并不新鲜,但是总让很多刚入门的 ​​​在实际工作中,我们经常听到“架构”和“架构师”这样的名词,并不新鲜,但是总让很多刚入门的人感觉很神秘,甚至是高深莫测。很少有人对“架构”有全面的了解和认识能并说清楚架构是什么,更谈不上掌握了。事实上,也只有极少数人能成为或者被冠以“架构师”这样的title。为此,笔者总结了对架构的一些理解,希望能够补充很多初入门的人在这方面认识上的不足,纠正一些误解。高手和老鸟就直接跳过吧。 架构的分类 对于“架构”来讲,理论上划分了5种架构视图,分别是:逻辑架构、开发架构、运行架构、物理架构、数据架构。根据名字,大家都可能大概能猜到其侧重点和含义。这里先用通俗的文字简单介绍下,便于大家理解,大家可以不必纠结概念和这些理论。 逻辑架构:逻辑架构关注的是功能,包含用户直接可见的功能,还有系统中隐含的功能。或者更加通俗来描述,逻辑架构更偏向我们日常所理解的“分层”,把一个项目分为“表示层、业务逻辑层、数据访问层”这样经典的“三层架构”。 开发架构:开发架构则更关注程序包,不仅仅是我们自己写的程序,还包括应用程序依赖的SDK、第三方类库、中间价等。尤其是像目前主流的Java、.NET等依靠虚拟机的语言和平台,以及主流的基于数据库的应用,都会比较关注。和逻辑架构有紧密的关联。 运…

Read More Read More

关于新冠病毒的小建议

关于新冠病毒的小建议

閱讀本文約花費: 10 (分鐘)转:一线小医生一枚,坐标美东离纽约不远,参与治了十几个旁观了几十个新冠病人,有点小心得小建议,给大家报告如下: 新冠的神药近期内是不可能有的。中国试药比美国宽松得多,试过了无数的药。之前中国呼声最高的是抗爱滋病药 (克立芝) ,但随后中国医生自己做的双盲实验证明了它没用,这结论3月18日发表后克立芝立刻打入冷宫。氯喹的前景更不乐观。很多风湿性关节炎和红斑狼疮病人长期服用氯喹,但并没有报告说这类病人就不容易得新冠或者变成重症。因为氯喹没太大的副作用 (但也是有的),我所在医院给所有住院病人都用上了,但我没有感受到它有减少转成重症的作用。人民的希望双盲实验已经做了很久,如果很有效的话肯定会提前揭盲结束 (早结束可以早卖早赚钱),所以估计也没多大的希望。从流感的经验来看,传统的疫苗效果也不会很大。值得关注的是美国搞的全新型mRNA疫苗,但效果也难以预计。 医院虽然没有神药,但是靠氧气和呼吸机这两样法宝,还是可以挽救一些生命的。轻症去医院的主要目的是吸氧,所以居家隔离恢复,在确认不缺氧的前提下,是安全可行的。确认不缺氧要靠指尖血氧计 (pulse oximeter) ,但很可惜这个神器远不如体温计普及,虽然它在正常价格的时候跟体温计一样便宜 (< $20),也一样好用。因为没有普及 pulse ox,所以美国医生经常只能告诉病人有了呼吸急促 (shor…

Read More Read More

刘韧:编辑的价值

刘韧:编辑的价值

閱讀本文約花費: 7 (分鐘)编者按:本文为DoNews编辑部内训课实录,创作于2011年7月。由传媒见闻谭缘于2020年4月根据录音整理。 记者的价值,就是替读者跑腿,读者不在现场,记者把现场发生的事告诉读者,那么编辑的价值在哪呢? 《诗经》、《易经》和《春秋》,这三部作品都是孔子编辑的,而不是他写的,他说“诗三百,思无邪”,是因为他把有邪的删掉了,把符合儒家价值观的留了下来。孔子是个编辑。 孔子还编了《易经》,《易经》传说是周文王被困山谷时写的。但《易经》最早的编纂是孔子做的,所以易经中很多思想和儒家是一致的。我们今天看到《易经》的解释,其实都来源于孔子。《春秋》是一本编年史,也是孔子编的。 最早的报纸是没有编辑的,只有排版。排版只用把所有的新闻堆在一起就可以了,当时信息特别少,能得到的信息都是重要信息。现在每天能产生数万条新闻,读者注意力极限不超过一百条。这样的比例,就要求必须有编辑,没有编辑,报纸是没法看的。现在是信息过载,而不是稀缺,过载要求必须选择。 上世纪90年代,我在安徽阜阳能把所有能接触到的信息都看一遍。当时的报纸非常少,电视也只有中央台很少的几个频道。进入互联网和卫星时代后,就过渡到了信息过载的阶段。2000年,我第一次装上卫星电视时,我太惊讶了,全世界的电视我都能看到。上世纪90年代初没有编辑其实还无所谓,因为信息很少,特别在中国,几乎没什么信息。我能把《北京…

Read More Read More

Redis跳跃表

Redis跳跃表

閱讀本文約花費: 7 (分鐘)跳跃表(skiplist)是一种随机化的数据, 由 William Pugh 在论文《Skip lists: a probabilistic alternative to balanced trees》中提出, 跳跃表以有序的方式在层次化的链表中保存元素, 效率和平衡树媲美 —— 查找、删除、添加等操作都可以在对数期望时间下完成, 并且比起平衡树来说, 跳跃表的实现要简单直观得多。 以下是个典型的跳跃表例子(图片来自维基百科): 从图中可以看到, 跳跃表主要由以下部分构成: 表头(head):负责维护跳跃表的节点指针。 跳跃表节点:保存着元素值,以及多个层。 层:保存着指向其他元素的指针。高层的指针越过的元素数量大于等于低层的指针,为了提高查找的效率,程序总是从高层先开始访问,然后随着元素值范围的缩小,慢慢降低层次。 表尾:全部由 NULL 组成,表示跳跃表的末尾。 因为跳跃表的定义可以在任何一本算法或数据结构的书中找到, 所以本章不介绍跳跃表的具体实现方式或者具体的算法, 而只介绍跳跃表在 Redis 的应用、核心数据结构和 API 。 跳跃表的实现 为了满足自身的功能需要, Redis 基于 William Pugh 论文中描述的跳跃表进行了以下修改: 允许重复的 score 值:多个不同的 mem…

Read More Read More

写作 博客/公众号 工具分享

写作 博客/公众号 工具分享

閱讀本文約花費: 7 (分鐘)不断打磨下来,形成自己的一套写作工具链,今天整理分享给大家,希望帮助大家的提高写作效率。 写作可以分为三步: 写作前 写作中 写作后 按照这三步介绍这个过程中我用到一些工具。 写作前 trello 官网地址:https://trello.com/ 这是一款任务管理工具,类似于敏捷开发中看板,我们可以快速管理任务。 日常工作我只要想到一个 idea,就会第一时间先记录到 idea 列表中。这里千万不要高估自己的记忆力,如果想到了,感觉记录下来。以前上午灵光一现想到一个 idea,准备晚上写一下,然后晚上就想不起来。。。 前期准备时,可以将收集到的资料,素材,全部放到具体卡片中。 当我们开始写作后,拖动到下一个列表,完成之后,再拖到下一个列表,这样写作任务非常清晰。 trello 十分强大,这里只是用了小功能,感兴趣的同学可以深入研究一下。 写作中 typora+iPic+坚果云 markdown 编辑器:typora,下载地址:https://typora.io/。 图床工具:iPic,下载地址:https://toolinbox.net/iPic/ 云盘:坚果云,下载地址:https://www.jianguoyun.com/ iPic 只支持 macos 在 typora 中使用 markd…

Read More Read More

世界最著名的飞地之一;俄罗斯孤悬海外的加里宁格勒州

世界最著名的飞地之一;俄罗斯孤悬海外的加里宁格勒州

閱讀本文約花費: 3 (分鐘)飞地是一种特殊的人文地理想象,指隶属于某一行政区管辖却不与本区毗连的土地。 飞地这个术语第一次出现于西班牙与法国1526年签订的《马德里条约》的文件上。 从中世纪第一次出现飞地这个术语到如今,出现了很多飞地,但成因相当复杂。 世界上最著名及最重要的飞地之一;俄罗斯在欧洲的飞地加里宁格勒州。 加里宁格勒洲南邻波兰,东北部和东部与立陶宛接壤,与俄罗斯本土不相邻。 加里宁格勒州是俄罗斯打入北约一个楔子,战略位置极其重要,从加里宁格勒到华沙距离为400公里,到柏林、哥本哈根、斯德哥尔摩的的距离均在600公里左右。 (北约东扩图,加里宁格勒州是俄罗斯楔在北约的一枚钉子) (箭头所指为加里宁格勒州) 加里宁格勒州曾经是俄罗斯联邦的军事重镇,其军事设施及密度亦是全欧洲最多最高的。 前苏联波罗的海军区总部曾经设在此地,俄罗斯波罗的海舰队总部也曾设于此。 (俄罗斯五大舰队分布图) (俄罗斯波罗的海舰队勋章) 加里宁格勒州是苏联二战胜利成果之一,如果说加里宁格勒是佩戴在俄罗斯胸口的一枚勋章;那么哥尼斯堡就是深扎在德国人心中无尽的悲伤。 加里宁格勒原名为哥尼斯堡,这个名字从1255年一直叫到1946年7月4日(此日被苏联改命为加里宁格勒), 加里宁格勒是普鲁士王国的发源地,1701年普鲁士首位国王弗雷德里克一世在这儿的大教堂加冕,并将哥尼斯堡定为普鲁士的首都。 二战后,东普…

Read More Read More

Spring源码笔记之Bean加载之准备创建Bean

Spring源码笔记之Bean加载之准备创建Bean

閱讀本文約花費: 16 (分鐘)我们知道从spring容器中获取单例bean时会先从缓存尝试获取,如果缓存中不存在已经加载的单例bean就需要从头开始bean的创建,而bean的创建过程是非常复杂的,本文就开始研究bean加载这部分的源码。 1. bean创建流程分析   在Spring中bean加载的逻辑是在getSingleton的重载方法中实现的: public Object getSingleton(String beanName, ObjectFactory<?> singletonFactory) { Assert.notNull(beanName, “‘beanName’ must not be null”); // 全局变量需要同步 synchronized (this.singletonObjects) { // 首先检查对应的bean是否已经加载过,因为singleton模式就是复用已创建的bean,所以这一步是必须的 Object singletonObject = this.singletonObjects.get(beanName); // 如果为空才可以进行singleton的bean的初始化 if (singletonObject == null) { if (this.singletonsCurrentlyInDestruction) {…

Read More Read More

肖战227事件始末

肖战227事件始末

閱讀本文約花費: 3 (分鐘)  2020年2月24日,中国大陆男星肖战的一些粉丝发现AO3作品库平台收录关于肖战的同人作品“下坠”,认为这部作品影响了肖战的形象,遂向政府部门举报相关平台(AO3、bilibili、百度网盘、LOFTER等),以及直接向中国网监部门举报,后来通过粉丝的大量投诉和举报,导致知名同人网站AO3(Archive of our own)作品库被封,无法从中国访问,这也使得几个圈子的路人开始围攻和抵制肖战所涉及的影视作品,代言等等,被称为肖战227事件。   2月27日,肖战粉丝们的肆意举报,恶言攻击写手和“路人”的做法已然引发众怒,众多同人作者因为惧怕收举报牵连而临时改名,同时,AO3百度贴吧被封禁,几个圈子的路人开始对肖战在各大平台的话题榜进行攻击,而这一行动被同人社群称为“227大团结”。   2月29日晚,中国大陆用户无法访问AO3,意味着AO3正式被屏蔽,怒火进一步蔓延,同人社群的反击开始延伸至肖战的影视作品,大批网民到中国大陆著名社交网站豆瓣对肖战的影视作品如《陈情令》、《庆余年》进行“刷低分”。商务代言方面,OLAY、小鹿茶(瑞幸咖啡)、OPPO、真果粒(蒙牛)、开小灶(统一企业)、百威啤酒、雅诗兰黛、佳洁士、沙宣等品牌皆受到了牵连,在这些产品的新浪微博评论中出现大量抵制肖战的留言。   3月1日,肖战工作室微博发文称:“注意到肖战粉丝的一些争…

Read More Read More

nginx使用手册+基本原理+优缺点

nginx使用手册+基本原理+优缺点

閱讀本文約花費: 4 (分鐘)一、nginx优点 1.反向代理 1、正向代理: 客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。 server不知道client是谁 2、反向代理:客户端请求服务器,中间也是经过一个代理服务器,客户端访问代理服务器就好像访问目标服务器一样。同时代理服务器将请求转发到后端具体服务器。 客户端不知道自己具体访问的服务器是谁 3、总结 https://blog.csdn.net/wnvalentin/article/details/88171847 正向代理是对客户端的代理,由客户端设立,客户端了解代理服务器和目标服务器,但目标服务器不了解真正的客户端是谁;使用正向代理可达到 突破访问限制、提高访问速度、对服务器隐藏客户端IP等目的; 反向代理是对服务器的代理,由服务器设立,客户端不了解真正的服务器是谁,使用反向代理可达到负载均衡、保障服务端安全、对客户端隐藏服务器IP等目的。 2.负载均衡 集群平摊请求压力 负载均衡策略: 轮询 :平均访问(默认方式) 权重 IP hash :每个ip分配一个固定的服务器 URL hash fair 根据响应时间来访问,哪个机器响应快就哪个 server模块的配置: …

Read More Read More

CSRF的几种防御方法的利弊分析

CSRF的几种防御方法的利弊分析

閱讀本文約花費: 5 (分鐘)本文直接从防御方式开始讨论,防御CSRF有4种方法: 使用POST替代GET 检验HTTP Referer 验证码 Token 使用POST替代GET 一些程序员在开发的时候都是用GET、POST通用的函数来接收客户端的数据,这样也是某些接口有CSRF的原因之一,但是将全部接口都改成只允许POST方式访问,就能防范CSRF了吗?答案是:不能。只能说提高了一些成本。 原本是GET方式访问的接口,攻击者只需要构造接口的URL参数让受害者点击即可。现在改成使用POST方式访问,攻击者只需要利用其他站点,在站点上布置一个POST请求,让用户点击。 检验HTTP Referer HTTP Referer真是一个用于安全的字段,除了能防范CSRF,还能防JSONP劫持、盗链、站外提交等安全问题。但是HTTP Referer就一点问题都没有了吗?答案是:否定的,HTTP Referer只能检查点击的链接来源是来自站内还是站外,如果是GET方式的CSRF,那链接本身就是站内的,也就意味着检验HTTP Referer是无效的。 验证码 上面说的两种防御CSRF的方式,都有一定缺陷。但是使用验证码是完全可以做到防止CSRF的,因为验证码是用户在提交表单的时候,必须输入图片验证码,保证了服务器收到的是来自预期的请求。这里我补充一下,验证码功能必须没有缺陷才行,我之前测试过很…

Read More Read More

不同数据一致性模型有哪些应用?

不同数据一致性模型有哪些应用?

閱讀本文約花費: 11 (分鐘) 对于 CAP 来说,放弃强一致性(这里说的一致性是强一致性),追求分区容错性和可用性,这是很多分布式系统设计时的选择。在工程实践中,基于 CAP 定理逐步演化,就提出了 Base 理论。 那么 Base 理论有哪些内容,Base 理论下的一致性模型又有哪些呢? Base 理论 Base 是三个短语的简写,即基本可用(Basically Available)、软状态(Soft State)和最终一致性(Eventually Consistent)。 Base 理论的核心思想是最终一致性,即使无法做到强一致性(Strong Consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual Consistency)。 接下来我们着重对 Base 理论中的三要素进行讲解。 三个要素详解 基本可用 基本可用比较好理解,就是不追求 CAP 中的「任何时候,读写都是成功的」,而是系统能够基本运行,一直提供服务。基本可用强调了分布式系统在出现不可预知故障的时候,允许损失部分可用性,相比正常的系统,可能是响应时间延长,或者是服务被降级。 举个例子,在双十一秒杀活动中,如果抢购人数太多超过了系统的 QPS 峰值,可能会排队或者提示限流,这就是通过合理的手段保护系统的稳定性,保证主要的服务正常,保证基本可用。 软状态 …

Read More Read More

Kubernetes(K8s) 安装(使用kubeadm安装Kubernetes集群)

Kubernetes(K8s) 安装(使用kubeadm安装Kubernetes集群)

閱讀本文約花費: 18 (分鐘)概述:         这篇文章是为了介绍使用kubeadm安装Kubernetes集群(可以用于生产级别)。使用了Centos 7系统。 一、Centos7 配置说明 1.1   Firewalld(防火墙) CentOS Linux 7 默认开起来防火墙服务(firewalld),而Kubernetes的Master与工作Node之间会有大量的网络通信,安全的做法是在防火墙上配置Kbernetes各组件(api-server、kubelet等等)需要相互通信的端口号。在安全的内部网络环境中可以关闭防火墙服务。 关闭防火墙的命令: 1 # firewall-cmd –state #查看防火墙状态 2 # systemctl stop firewalld.service #停止firewall 3 # systemctl disable firewalld.service #禁止firewall开机启动 1.2   SELinux 建议禁用SELinux,让容器可以读取主机文件系统 执行命令: 1 # getenforce #查看selinux状态 2 # setenforce 0 #临时关闭selinux 3 # sed -i ‘s/^ *SELINUX=enforc…

Read More Read More

NASA太难了:将247 PB数据放到AWS却付不起高额下载成本

NASA太难了:将247 PB数据放到AWS却付不起高额下载成本

閱讀本文約花費: 8 (分鐘)单是这一项决策失误,就让 NASA 的云战略从天堂瞬间跌进了地狱。 到 2025 年,美国宇航局(NASA)计划新增 215 PB 数据存储空间,并希望 AWS 能够提供其中大部分云存储的容量。但让 NASA 没想到的是:把数据迁移至云端之后,出口端的数据下载成本却大幅激增,而他们并没给这比投入做预算。 换句话说,以后科学家们必须得付费才能下载这些本就属于他们的数据。 单是这一项决策失误,就让 NASA 的云战略从天堂瞬间跌进了地狱。 按原定计划,NASA 到 2025 年将拥有 247 PB 的数据处理能力,这些数据放在云端。NASA 跟 AWS 签下的是一笔多大的单子呢?每月花费达 543.9 万美元。到 2025 年,除 6500 万美元的原有交易额外,NASA 每年还得额外向 AWS 支付约 3000 万美元的新增云服务开销。 NASA 忘了一个前提——云端数据下载成本 受到影响的数据主要来自 NASA 下辖的地球科学数据与信息系统(ESDIS)计划,此项计划旨在从与地球观测相关的众多空间任务中收集信息。收集完成后,相应读数将由地球观测系统数据与信息系统(EOSDIS)向各研究机构交付。 为了存储所有数据并支持整套 EOSDIS,NASA 运营有 12 处分布式主归档中心(DAAC),并借此带来安全稳定的冗余和备份。但沉重的基础设施管理负担也让…

Read More Read More

分布式系统中最基础的 CAP 理论及其应用

分布式系统中最基础的 CAP 理论及其应用

閱讀本文約花費: 10 (分鐘) 我们主要介绍分布式系统中最基础的 CAP 理论及其应用。 对于开发或设计分布式系统的架构师、工程师来说,CAP 是必须要掌握的基础理论,CAP 理论可以帮助架构师对系统设计中目标进行取舍,合理的规划系统拆分的维度。下面我们先讲讲分布式系统的特点。 分布式系统的特点 随着移动互联网的快速发展,互联网的用户数量越来越多,产生的数据规模也越来越大,对应用系统提出了更高的要求,我们的系统必须支持高并发访问和海量数据处理。 分布式系统技术就是用来解决集中式架构的性能瓶颈问题,来适应快速发展的业务规模,一般来说,分布式系统是建立在网络之上的硬件或者软件系统,彼此之间通过消息等方式进行通信和协调。 分布式系统的核心是可扩展性,通过对服务、存储的扩展,来提高系统的处理能力,通过对多台服务器协同工作,来完成单台服务器无法处理的任务,尤其是高并发或者大数据量的任务。 除了对可扩展性的需求,分布式系统还有不出现单点故障、服务或者存储无状态等特点。 单点故障(Single Point Failure)是指在系统中某个组件一旦失效,这会让整个系统无法工作,而不出现单点故障,单点不影响整体,就是分布式系统的设计目标之一; 无状态,是因为无状态的服务才能满足部分机器宕机不影响全部,可以随时进行扩展的需求。 由于分布式系统的特点,在分布式环境中更容易出现问题,比如节点之间通信失败…

Read More Read More

一文带你搞懂API网关

一文带你搞懂API网关

閱讀本文約花費: 19 (分鐘)前言 假设你正在开发一个电商网站,那么这里会涉及到很多后端的微服务,比如会员、商品、推荐服务等等。 那么这里就会遇到一个问题,APP/Browser怎么去访问这些后端的服务? 如果业务比较简单的话,可以给每个业务都分配一个独立的域名(https://service.api.company.com),但这种方式会有几个问题: 每个业务都会需要鉴权、限流、权限校验等逻辑,如果每个业务都各自为战,自己造轮子实现一遍,会很蛋疼,完全可以抽出来,放到一个统一的地方去做。 如果业务量比较简单的话,这种方式前期不会有什么问题,但随着业务越来越复杂,比如淘宝、亚马逊打开一个页面可能会涉及到数百个微服务协同工作,如果每一个微服务都分配一个域名的话,一方面客户端代码会很难维护,涉及到数百个域名,另一方面是连接数的瓶颈,想象一下你打开一个APP,通过抓包发现涉及到了数百个远程调用,这在移动端下会显得非常低效。 每上线一个新的服务,都需要运维参与,申请域名、配置Nginx等,当上线、下线服务器时,同样也需要运维参与,另外采用域名这种方式,对于环境的隔离也不太友好,调用者需要自己根据域名自己进行判断。 另外还有一个问题,后端每个微服务可能是由不同语言编写的、采用了不同的协议,比如HTTP、Dubbo、GRPC等,但是你不可能要求客户端去适配这么多种协议,这是一项非常有挑战的工…

Read More Read More

如何成为优秀的技术主管?你要做到这三点

如何成为优秀的技术主管?你要做到这三点

閱讀本文約花費: 36 (分鐘) 技术主管,又叫「技术经理」,英文一般是 Tech Leader ,简称 TL。随着工作经验的不断积累,能力的不断提升,每个人都有机会成为Team Leader。然而在机会到来前,我们必须提前做好准备,对TL的工作职责有一定了解。当然,这也会为当下更好地配合TL工作打下基础。 今天, 结合自己多年的经验,从开发规范、开发流程、技术规划与管理三个角度出发,分享对技术TL这一角色的理解与思考。 「技术主管」是开发团队中的某位程序员需要对一起创建系统的整个开发团队负责时所承担的角色。通常他既要对最终交付的软件系统负责,另外也会像一个程序员一样去开发实现系统。 一个技术主管的 60% ~ 70% 的时间可能花在了开发任务分解分配、开发实践、技术架构评审、代码审核和风险识别上,而余下的 30% ~ 40% 的时间则花在为了保障系统按时交付所需的各种计划、协作、沟通、管理上。和团队管理者不同的是,技术主管的大部分管理工作都是针对具体研发任务和技术事务的。 接下来基于我在技术TL这个角色上,在开发规范、开发流程、技术管理与规划等方面我的一些心路历程,和大家共勉。 开发规范 我当时负责的业务是集团收购一家子公司的业务,在整体技术标规范上与集团的技术标准存在很大的差异。开发规范可以说是我来到这个团队干的第一件事,我当时面对的问题是API接口格式混乱,没有标准的RPC服…

Read More Read More

     
Scroll Up