2020年8月18日
摘要: 2019年是Jenkins诞生15周年,对于任何一个软件来说,15年都不是一个短暂的时间。在这个时间点,社区也在展望过去15年来的Jenkins发展历程,并憧憬下一个15年Jenkins的变化。 可以说,从DevOps产品的角度来说,Jenkins本身就是一个非常出色的典型案例。 最开始,这是一个由 阅读全文
posted @ 2020-08-18 15:41 肉松蛋卷 阅读(206) 评论(0) 推荐(0)
摘要: DevOps文化好像是一个矛盾结合体:一方面,文化这种东西似乎只可意会不可言传;另一方面,文化对DevOps实践的重要性又是毋庸置疑的。 在各种行业大会上,关于文化的议题总是屈指可数。原因也很简单,关于文化,一般都说不明白,即便能说明白,也改变不了什么。因为文化的改变可不是像引入一个工具那么简单,很 阅读全文
posted @ 2020-08-18 15:40 肉松蛋卷 阅读(243) 评论(0) 推荐(0)
摘要: DevOps工程师必备的硬实力 所谓硬实力,说白了就是指一个人的技术能力。软实力通常是“只可意会不可言传”的,但技术本身就具体多了,重要的是,技术水平的高低相对来说也更好衡量。在公司里面,技术人员要想获得晋升,重点就是依靠技术能力。 IT行业覆盖的技术领域非常广,而且近些年的新技术也是层出不穷的,从 阅读全文
posted @ 2020-08-18 15:39 肉松蛋卷 阅读(464) 评论(0) 推荐(0)
摘要: 今天又到了特别放送的环节,在学习交流DevOps的过程中,经常有人会问这样的问题: 我想学习DevOps,可以推荐一些好的书和资源吗? DevOps相关的最新行业案例,我可以在哪里获取呢? 你是怎么知道这么多有趣的故事的呢? 这些问题的“出镜率”特别高,所以,我今天专门来跟你聊聊有关DevOps学习 阅读全文
posted @ 2020-08-18 15:36 肉松蛋卷 阅读(685) 评论(0) 推荐(0)
摘要: 相信这应该是很多刚开始接触DevOps的同学最关心的问题。毕竟,从实用的角度出发,每个人都希望能够尽快上手实践。所以今天,我来跟你聊聊,我认为的DevOps工程师的必备技能以及学习路径。不过在此之前,我们要先了解DevOps工程师的岗位职责。 全球最大职业社交网站LinkedIn(领英)2018年发 阅读全文
posted @ 2020-08-18 15:35 肉松蛋卷 阅读(566) 评论(0) 推荐(0)
摘要: 我们可以从系统和应用程序两个角度,来进行性能优化。 从系统的角度来说,主要是对 CPU、内存、网络、磁盘 I/O 以及内核软件资源等进行优化。 而从应用程序的角度来说,主要是简化代码、降低 CPU 使用、减少网络请求和磁盘 I/O,并借助缓存、异步处理、多进程和多线程等,提高应用程序的吞吐能力。 性 阅读全文
posted @ 2020-08-18 15:32 肉松蛋卷 阅读(191) 评论(0) 推荐(0)
摘要: 上一节我们学习了 Linux 磁盘 I/O 的工作原理,并了解了由文件系统层、通用块层和设备层构成的 Linux 存储系统 I/O 栈。 其中,通用块层是 Linux 磁盘 I/O 的核心。向上,它为文件系统和应用程序,提供访问了块设备的标准接口;向下,把各种异构的磁盘设备,抽象为统一的块设备,并会 阅读全文
posted @ 2020-08-18 15:29 肉松蛋卷 阅读(226) 评论(0) 推荐(0)
摘要: 上一节,我们学习了 Linux 文件系统的工作原理。简单回顾一下,文件系统是对存储设备上的文件,进行组织管理的一种机制。而Linux 在各种文件系统实现上,又抽象了一层虚拟文件系统VFS,它定义了一组,所有文件系统都支持的,数据结构和标准接口。 这样,对应用程序来说,只需要跟 VFS 提供的统一接口 阅读全文
posted @ 2020-08-18 15:28 肉松蛋卷 阅读(389) 评论(0) 推荐(1)
摘要: 通过前面CPU和内存模块的学习,我相信,你已经掌握了CPU和内存的性能分析以及优化思路。从这一节开始,我们将进入下一个重要模块——文件系统和磁盘的I/O性能。 同CPU、内存一样,磁盘和文件系统的管理,也是操作系统最核心的功能。 磁盘为系统提供了最基本的持久化存储。 文件系统则在磁盘的基础上,提供了 阅读全文
posted @ 2020-08-18 15:26 肉松蛋卷 阅读(250) 评论(0) 推荐(0)
摘要: 上一节我讲了 CPU 使用率是什么,并通过一个案例教你使用 top、vmstat、pidstat 等工具,排查高 CPU 使用率的进程,然后再使用 perf top 工具,定位应用内部函数的问题。不过就有人留言了,说似乎感觉高 CPU 使用率的问题,还是挺容易排查的。 那是不是所有 CPU 使用率高 阅读全文
posted @ 2020-08-18 15:24 肉松蛋卷 阅读(404) 评论(0) 推荐(0)
摘要: 通过前两节对平均负载和 CPU 上下文切换的学习,我相信你对 CPU 的性能已经有了初步了解。不过我还是想问一下,在学这个专栏前,你最常用什么指标来描述系统的 CPU 性能呢?我想你的答案,可能不是平均负载,也不是 CPU 上下文切换,而是另一个更直观的指标—— CPU 使用率。 我们前面说过,CP 阅读全文
posted @ 2020-08-18 15:23 肉松蛋卷 阅读(452) 评论(0) 推荐(0)
摘要: 一讲,我们探讨了如何通过提高互联网服务的效率,降低对公司服务容量的要求。今天我们讨论另一个有效手段——互联网服务的内部需求控制管理。 互联网公司内部,往往有很多后端服务,比如Key-Value,也就是键值数据库服务。公司内部对这些后端服务,会有很多使用的需求。需求自然有合理的,也有不是很合理的。我们 阅读全文
posted @ 2020-08-18 12:00 肉松蛋卷 阅读(203) 评论(0) 推荐(0)
摘要: 我们都知道,支持大量用户的互联网公司,通常会部署相当规模的系统容量来运行各种服务。 如果你想要有效地运行业务,就应使业务的容量需求和容量供应尽可能地相等。为什么这么说呢?如果容量供应不能满足需求,那么部分业务将​​因容量不足,不能部署或扩展。如果容量供应过多,那么公司基础设施的效率就降低了。 服务效 阅读全文
posted @ 2020-08-18 11:58 肉松蛋卷 阅读(1020) 评论(0) 推荐(0)
摘要: 今天我们来讨论一下在公司运营方面很重要的容量规划。容量规划,就是根据互联网服务的需求和公司发展目标,而决定容量的供应能力的过程。 光说概念你可能不太明白,不过你可以这么理解,容量规划是为了回答一系列和公司业务运营有关的重要问题而产生的: 单台服务器的最大处理能力是多少? 未来半年公司还会有多少可用容 阅读全文
posted @ 2020-08-18 11:56 肉松蛋卷 阅读(452) 评论(0) 推荐(0)
摘要: 说起服务器,你一定不陌生。那你知道Facebook的服务器是什么样的吗?要知道,Facebook同时使用着很多不同的服务器。 在应对需要高速缓存的Facebook新闻、广告投放和搜索时,Facebook使用的是有比较大内存和较强CPU的服务器。现在使用的每台服务器都有256GB的主内存和两个处理器的 阅读全文
posted @ 2020-08-18 11:54 肉松蛋卷 阅读(339) 评论(0) 推荐(0)
摘要: 一定有过在网页或者手机上下载照片的体验,如果数据传输太慢,那你的体验一定十分糟糕。你看,互联网实体之间的数据快速传输对用户体验至关重要。这里涉及到的其实就是网络传输问题。所以,今天我们就通过生产实践中的案例,来探讨一下互联网服务中的数据传输性能。 说到底,网络传输问题其实就分两种: 数据根本没有传递 阅读全文
posted @ 2020-08-18 11:52 肉松蛋卷 阅读(1170) 评论(0) 推荐(0)
摘要: 从今天开始,我们进入新的模块:性能工程实践。在这一模块中,我会讲述在实际生产环境中应用性能工程的场景、案例。这些场景和案例都是针对大规模互联网服务,是在解决实际性能问题后总结的经验。 今天我要讲的主题是“在生产环境中进行真实场景的压力测试”。这来源于我对LinkedIn公司生产实践的总结。 Link 阅读全文
posted @ 2020-08-18 11:49 肉松蛋卷 阅读(577) 评论(0) 推荐(0)
摘要: 我们前面几讲介绍了性能优化的原则和策略,并且集中探讨了CPU、内存和存储三个最关键的领域。 今天我们来讲一个比较复杂的JVM场景和超大延迟的性能问题;这是本模块,也就是性能优化模块的最后一讲。 我们会一步步地探讨这个性能问题的表象、问题的重现、性能分析的过程和解决方案。这个性能问题的复杂性,表现在它 阅读全文
posted @ 2020-08-18 11:48 肉松蛋卷 阅读(324) 评论(0) 推荐(0)
摘要: 我们之前讲过,存储系统的性能很关键(参见第17讲)。我们这一讲就探讨存储方面的优化案例,是关于SSD性能的。 现在很多公司里面的高性能存储系统,一般都是基于SSD的,这主要归功于SSD价格在近几年的大幅度下降。但是,SSD也不是包治百病的灵丹妙药,也有自己的特殊性能问题。我们今天就重点讲述两点:SS 阅读全文
posted @ 2020-08-18 11:47 肉松蛋卷 阅读(1254) 评论(0) 推荐(0)
摘要: 我们今天继续探讨性能优化的实践,介绍一个系统方面的优化案例。这个案例涉及好几个方面,包括CPU的使用效率、地址映射、运维部署等。 开发项目时,当程序开发完成后,生成的二进制程序需要部署到服务器上并运行。运行这个程序时,我们会不断衡量各种性能指标。而生产实践中,我们经常发现一个问题:是指令地址映射的不 阅读全文
posted @ 2020-08-18 11:45 肉松蛋卷 阅读(2103) 评论(0) 推荐(0)
摘要: 面两讲中,我介绍了性能优化的六大原则和十大策略。从今天开始,我们来通过具体案例的解决方案讲解,了解这些原则和策略是如何应用的。 首先,我们要来探讨的是一个CPU相关的性能优化案例。 这个性能案例,是关于CPU的最后一级缓存的。你应该知道,最后一级缓存(一般也就是L3),如果命中率不高的话,对系统性能 阅读全文
posted @ 2020-08-18 11:44 肉松蛋卷 阅读(4921) 评论(0) 推荐(0)
摘要: 一讲中,我们聊了性能优化的六大原则。原则有了,但是在针对实际的性能问题的时候,用什么样的解决方案才可以提升性能呢?这就需要你了解具体的优化策略了。 现实中的性能问题和具体领域千差万别,我也不可能面面俱到。但是为了帮助你理解,我总结了十大常用的优化策略。 我将这十大策略分成五个类别,每个类别对应两个相 阅读全文
posted @ 2020-08-18 11:42 肉松蛋卷 阅读(1191) 评论(0) 推荐(1)
摘要: 今天我们进入了专栏的新模块:性能优化。在这个模块里,我会先从“性能优化的六大原则”开始讲起,然后再为你讲解实践中普遍采用的十个性能优化策略,并且分别针对CPU、系统、存储以及跨层这几个领域,讲讲具体的优化案例。 我们今天先探讨性能优化的原则。在讲具体原则之前,我想先给你讲一个有趣的往事。 我曾经负责 阅读全文
posted @ 2020-08-18 11:41 肉松蛋卷 阅读(986) 评论(0) 推荐(0)
摘要: 前面几讲,我们讨论了CPU、内存和存储系统的性能。不过你也清楚,各种互联网服务的数据传递终归是需要通过网络来传输的,所以网络性能也是至关重要的。所以,今天我们就来接着学习网络性能相关的内容。 这一讲我的讲解,依然是会逐步递进,先介绍有关网络的几个性能指标,并从单机的网络性能说起,之后推进到数据中心内 阅读全文
posted @ 2020-08-18 11:38 肉松蛋卷 阅读(413) 评论(0) 推荐(0)
摘要: 前面两讲我们讨论了CPU和内存,今天我们讨论第三个重要的主题:存储系统。现在是大数据时代,这些数据终归要保存到各种存储系统里面,以供读写和分析,因此讨论存储系统的性能问题就很有必要了。 狭义上的存储往往是硬件,比如磁盘、磁带还有固态硬盘。而广义上的存储系统除了指硬件的硬盘,还包括基于网络的存储系统, 阅读全文
posted @ 2020-08-18 11:36 肉松蛋卷 阅读(1109) 评论(0) 推荐(0)
摘要: 上一讲我们讨论了关于CPU的性能指标和分析。CPU和内存是和程序性能最相关的两个领域;那么这一讲,我们就来讨论和内存相关的性能指标和性能分析的工具。 内存方面的性能指标,主要有缓存命中率、缓存一致性、内存带宽、内存延迟、内存的使用大小及碎片、内存的分配和回收速度等,接下来我会逐一进行介绍。现代很多C 阅读全文
posted @ 2020-08-18 11:34 肉松蛋卷 阅读(4096) 评论(0) 推荐(0)
摘要: 这一讲先来讨论关于CPU的常见性能问题。首先我们从硬件的角度,来看看CPU的性能取决于哪些因素,然后分析一下CPU的内部结构。接着我们探讨和CPU性能相关的软件系统,看看CPU运行时侯的调度和切换。 CPU的性能决定因素 宏观来讲,一台服务器里面的CPU性能取决于好几个因素,包括有多少处理器、多少个 阅读全文
posted @ 2020-08-18 11:32 肉松蛋卷 阅读(577) 评论(0) 推荐(0)
摘要: 从这一讲开始,我们来探讨一下常见的各种性能问题,和如何进行相应的性能分析。我们首先宏观地介绍一下性能的外部指标、内部瓶颈和资源制约,以及如何正确地进行性能分析。然后接下来的几讲分别重点讨论CPU、内存、存储和网络几个领域。 性能的外部指标 谈论应用程序系统和互联网服务的性能时,我们首先要清楚外部的性 阅读全文
posted @ 2020-08-18 11:30 肉松蛋卷 阅读(489) 评论(0) 推荐(0)
摘要: 今天我们讨论性能测试如何和其他系统进行智能集成,也就是如何让性能测试这一工作从单独的、一次性的、手工发起的、传统的人工操作,进化成一个和开发及运维过程相结合的、持续的、自动重复执行的智能操作。 性能测试模式的演化 性能测试作为IT公司的一种重要工作,它的工作模式正在从传统的手工模式,不断进化成智能集 阅读全文
posted @ 2020-08-18 11:29 肉松蛋卷 阅读(266) 评论(0) 推荐(0)
摘要: 我们在前面两讲讨论了如何进行性能测试的规划和设计。性能测试离不开合适的工具,那么这一讲,我们来讨论一下测试工具的分类和构成,并根据七个不同的测试场景,分别学习几个常用的高质量测试工具,尤其是开源的。 这七个测试场景分别是:Web测试、系统测试、数据库测试、文件IO测试、存储测试、网络测试以及移动Ap 阅读全文
posted @ 2020-08-18 11:27 肉松蛋卷 阅读(745) 评论(0) 推荐(0)
摘要: 上一讲我们讲了不同类型的性能测试。今天我们来讲如何规划一个性能测试和具体的执行步骤。在规划任何一种性能测试时,最重要的事情是搞清楚被测试的实体,也就是SUT(System Under Test),对应的性能指标和度量,以及期望的结果。在此基础上,根据测试的类型来决定和规划具体的测试步骤,然后执行测试 阅读全文
posted @ 2020-08-18 11:25 肉松蛋卷 阅读(344) 评论(0) 推荐(0)
摘要: 从这一讲开始我们讨论性能测试。性能测试是一种特殊的软件测试,它的目的是确保软件应用程序在一定的负载流量下运行良好。性能测试是性能分析和性能优化的基础,它的目标是发现和性能相关的各种问题和性能瓶颈,从而进一步去消除错误和性能瓶颈。 由于性能测试本身就有好多种类;加上各种测试之间的界限其实很模糊,这就造 阅读全文
posted @ 2020-08-18 11:23 肉松蛋卷 阅读(308) 评论(0) 推荐(0)
摘要: 今天这一讲是”数理基础“这一部分的最后一讲,我在这一讲会给你总结一组性能相关的常用的数字。这些数字在做性能和设计方面的工作时经常用到。它们就像九九乘法表一样,我希望你能熟记在心。 记住这些数字的好处是,每次看到一个性能相关的数据的时候,我们立刻就能知道这个性能数据有没有问题。 举个简单例子,如果我们 阅读全文
posted @ 2020-08-18 11:22 肉松蛋卷 阅读(962) 评论(0) 推荐(0)
摘要: 我们这一讲来谈谈如何分析我们所得到的性能数据。现代的应用程序和互联网服务系统都比较复杂,要关心的性能参数也很多,所以你从各种渠道得到的性能相关的数据量往往很大。那么要如何从大量的数据中找出我们所关心的特征和规律呢?这就需要你对数据做各种分析和对比了。 这一讲要解决的核心问题就是:如何从大量数据中看出 阅读全文
posted @ 2020-08-18 11:21 肉松蛋卷 阅读(559) 评论(0) 推荐(0)
摘要: 上一讲我们讲了和性能优化有关的三大基础定律法则。今天我们继续打基础,讲一点统计方面的数理知识,包括重要的概率统计和排队论。 或许你对概率统计和排队论有点发怵,但这些内容是必须学会的,因为它们很重要。因为它们是性能测试和优化这座高楼大厦的地基。地基打不好,性能测试和优化也不会做得很好。 而且我想强调的 阅读全文
posted @ 2020-08-18 11:18 肉松蛋卷 阅读(1146) 评论(0) 推荐(0)
摘要: 所以接下来的几讲,我们需要先学习一些基础知识,包括和性能工程相关的几个重要定律法则和数理基础。这一讲我先和你探讨三个定律法则:帕累托法则、阿姆达尔定律和利特尔法则。 帕累托法则 我想你可能知道帕累托法则,它也被称为 80/20 法则、关键少数法则,或者八二法则。 这个法则是基于我们生活中的认识产生的 阅读全文
posted @ 2020-08-18 11:17 肉松蛋卷 阅读(667) 评论(0) 推荐(0)
摘要: 怎么定义“性能”和 “性能好”? 说起代码性能,首先我们需要弄清楚什么样的代码算是性能好?怎么样算是性能不好? 代码性能表现在很多方面和指标,比较常见的几个指标有吞吐量(Throughput)、服务延迟(Service latency)、扩展性(Scalability)和资源使用效率(Resourc 阅读全文
posted @ 2020-08-18 11:10 肉松蛋卷 阅读(534) 评论(0) 推荐(0)
摘要: 随着科技的快速发展,各种新的技术和概念不断出现,持续出现的新技术会不断推动安全的发展。虽然,每一个新技术都会衍生出新的安全威胁和隐患,但是,这些新的安全问题也正是安全行业保持活力的源泉。所以,对于安全人员来说,这些新技术的出现既是一种挑战,也是一种机遇。 近几年,IoT、IPv6和区块链是三个热度很 阅读全文
posted @ 2020-08-18 11:07 肉松蛋卷 阅读(354) 评论(0) 推荐(0)
摘要: 安全涉及的知识面非常广,更新速度也很快,前辈们很难有足够的时间和精力来言传身教。这个时候就需要我们具备良好的自学能力,通过持续地学习来掌握新的知识,应对新的变化和挑战。 优质的学习资源是自学的重要基础。今天,我就来盘点一下,对我个人的安全学习产生帮助的各类学习资源,以及不同阶段的安全人员应该如何对各 阅读全文
posted @ 2020-08-18 11:06 肉松蛋卷 阅读(367) 评论(0) 推荐(0)
摘要: 前端的安全性一直是我们在考虑安全问题时,没有办法绕过的关键问题。今天,我就来和你聊一聊如何保护前端的安全性。 我们先来看一个攻击事件。2017年,12306网站被曝出有“买下铺”的功能。我们都有过买票的经历,当我们在12306上买卧铺的时候,是没法选择上铺、中铺还是下铺的。但是,有人去分析了1230 阅读全文
posted @ 2020-08-18 11:05 肉松蛋卷 阅读(307) 评论(0) 推荐(0)
摘要: 完成备选方案的设计和选择后,我们终于可以长出一口气,因为整个架构设计最难的一步已经完成了,但整体方案尚未完成,架构师还需继续努力。接下来我们需要再接再励,将最终确定的备选方案进行细化,使得备选方案变成一个可以落地的设计方案。所以今天我来讲讲架构设计流程第4步:详细方案设计。 架构设计第4步:详细方案 阅读全文
posted @ 2020-08-18 10:59 肉松蛋卷 阅读(452) 评论(0) 推荐(0)
摘要: 上一期我讲了设计备选方案,在完成备选方案设计后,如何挑选出最终的方案也是一个很大的挑战,主要原因有: 每个方案都是可行的,如果方案不可行就根本不应该作为备选方案。 没有哪个方案是完美的。例如,A方案有性能的缺点,B方案有成本的缺点,C方案有新技术不成熟的风险。 评价标准主观性比较强,比如设计师说A方 阅读全文
posted @ 2020-08-18 10:57 肉松蛋卷 阅读(496) 评论(0) 推荐(0)
摘要: 上一期我讲了架构设计流程第1步识别复杂度,确定了系统面临的主要复杂度问题后,方案设计就有了明确的目标,我们就可以开始真正进行架构方案设计了。今天我来讲讲架构设计流程第2步:设计备选方案,同样还会结合上期“前浪微博”的场景,谈谈消息队列设计备选方案的实战。 架构设计第2步:设计备选方案 架构师的工作并 阅读全文
posted @ 2020-08-18 10:56 肉松蛋卷 阅读(324) 评论(0) 推荐(0)
摘要: 从今天开始,我将分4期,结合复杂度来源和架构设计原则,通过一个模拟的设计场景“前浪微博”,和你一起看看在实践中究竟如何进行架构设计。今天先来看架构设计流程第1步:识别复杂度。 架构设计第1步:识别复杂度 我在前面讲过,架构设计的本质目的是为了解决软件系统的复杂性,所以在我们设计架构时,首先就要分析系 阅读全文
posted @ 2020-08-18 10:54 肉松蛋卷 阅读(216) 评论(0) 推荐(0)
摘要: 周二,我给你介绍了架构设计的三条核心原则,先复习一下:合适原则、简单原则和演化原则。我们在架构设计实践中,应该时刻谨记这三条设计原则,指导我们设计出合适的架构,即使是代表中国互联网技术最顶尖水平的BAT,其架构的发展历程也同样遵循这三条原则。 今天我就以大家耳熟能详的淘宝和手机QQ作为案例,来简单分 阅读全文
posted @ 2020-08-18 10:52 肉松蛋卷 阅读(229) 评论(0) 推荐(0)
摘要: 前面几期专栏,我跟你系统的聊了架构设计的主要目的是为了解决软件系统复杂度带来的问题,并分析了复杂度的来源。从今天开始,我会分两期讲讲架构设计的3个原则,以及架构设计原则的案例。 成为架构师是每个程序员的梦想,但并不意味着把编程做好就能够自然而然地成为一个架构师,优秀程序员和架构师之间还有一个明显的鸿 阅读全文
posted @ 2020-08-18 10:50 肉松蛋卷 阅读(210) 评论(0) 推荐(0)
摘要: 复杂度来源前面已经讲了高性能和高可用,今天来聊聊可扩展性。 可扩展性指系统为了应对将来需求变化而提供的一种扩展能力,当有新的需求出现时,系统不需要或者仅需要少量修改就可以支持,无须整个系统重构或者重建。 由于软件系统固有的多变性,新的需求总会不断提出来,因此可扩展性显得尤其重要。在软件开发领域,面向 阅读全文
posted @ 2020-08-18 10:42 肉松蛋卷 阅读(211) 评论(0) 推荐(0)
摘要: 参考维基百科,先来看看高可用的定义。 系统无中断地执行其功能的能力,代表系统的可用性程度,是进行系统设计时的准则之一。 这个定义的关键在于“无中断”,但恰好难点也在“无中断”上面,因为无论是单个硬件还是单个软件,都不可能做到无中断,硬件会出故障,软件会有bug;硬件会逐渐老化,软件会越来越复杂和庞大 阅读全文
posted @ 2020-08-18 10:41 肉松蛋卷 阅读(156) 评论(0) 推荐(0)
摘要: 周四,我为你讲了架构设计的主要目的是为了解决软件系统复杂度带来的问题。那么从今天开始,我将为你深入分析复杂度的6个来源,先来聊聊复杂度的来源之一高性能。 对性能孜孜不倦的追求是整个人类技术不断发展的根本驱动力。例如计算机,从电子管计算机到晶体管计算机再到集成电路计算机,运算性能从每秒几次提升到每秒几 阅读全文
posted @ 2020-08-18 10:35 肉松蛋卷 阅读(242) 评论(0) 推荐(0)
摘要: 周二,我们聊了架构出现的历史背景和推动因素。以史为鉴,对我们了解架构设计的目的很有帮助。谈到架构设计,相信每个技术人员都是耳熟能详,但如果深入探讨一下,“为何要做架构设计?”或者“架构设计目的是什么?”类似的问题,大部分人可能从来没有思考过,或者即使有思考,也没有太明确可信的答案。 架构设计的误区 阅读全文
posted @ 2020-08-18 10:34 肉松蛋卷 阅读(212) 评论(0) 推荐(0)
摘要: 理解了架构的有关概念和定义之后,今天,我会给你讲讲架构设计的历史背景。我认为,如果想要深入理解一个事物的本质,最好的方式就是去追寻这个事物出现的历史背景和推动因素。我们先来简单梳理一下软件开发进化的历史,探索一下软件架构出现的历史背景。 机器语言(1940年之前) 最早的软件开发使用的是“机器语言” 阅读全文
posted @ 2020-08-18 10:33 肉松蛋卷 阅读(203) 评论(0) 推荐(0)
摘要: 对于技术人员来说,“架构”是一个再常见不过的词了。我们会对新员工培训整个系统的架构,参加架构设计评审,学习业界开源系统(例如,MySQL、Hadoop)的架构,研究大公司的架构实现(例如,微信架构、淘宝架构)……虽然“架构”这个词常见,但如果深究一下“架构”到底指什么,大部分人也许并不一定能够准确地 阅读全文
posted @ 2020-08-18 10:32 肉松蛋卷 阅读(248) 评论(0) 推荐(0)
摘要: 专栏上一期我给你讲解了微服务多机房部署的实践,以及需要解决的三个问题。大多数业务在发展到一定阶段,要么出于高可用性的需要,把业务部署在多个机房以防止单个机房故障导致整个服务不可用;要么出于访问量大的需要,把业务流量分散到多个机房以减少单个机房的流量压力。此时,服务一般是部署在企业内部机房的机器上,并 阅读全文
posted @ 2020-08-18 10:29 肉松蛋卷 阅读(547) 评论(0) 推荐(0)
摘要: 专栏前面我在讲服务治理时提到过,为了实现高可用性,微服务一般要部署在多个机房,保证有一个机房因为各种不可抗力因素导致不可用时,可以把流量切换到其他可用机房来避免故障。但是,是不是只要部署到多个机房就万事大吉了呢?你有没有想过这几个问题呢? 一切正常时用户请求该访问哪个机房? 多个机房之间的数据如何同 阅读全文
posted @ 2020-08-18 10:28 肉松蛋卷 阅读(690) 评论(0) 推荐(0)
摘要: 专栏上一期我给你讲解了单体应用拆分为微服务后带来的开发、测试和运维复杂度的提升,可以通过DevOps实现CI/CD流程的自动化来解决。除此之外,单体应用拆分为微服务还带来另外一个问题,也就是拆分出来后的多个微服务容量如何规划的问题。在单体应用时,只需要针对这个单体应用的访问量和实际接口性能来决定要不 阅读全文
posted @ 2020-08-18 10:26 肉松蛋卷 阅读(848) 评论(0) 推荐(0)
摘要: 把一个大的单体应用拆分成多个微服务之后,每个服务都可以独立进行开发、测试和运维。但当拆分的微服务足够多时,却又仿佛陷入一个新的泥沼,无论是业务代码的开发还是测试和运维,工作量都比之前提升了很多。 采单体应用架构时,一个业务需求只需要修改单体应用的代码,然后针对这个单体应用进行测试,测试通过后再把单体 阅读全文
posted @ 2020-08-18 10:25 肉松蛋卷 阅读(428) 评论(0) 推荐(0)
摘要: 专栏前面的文章,我主要给你讲解了微服务架构的基础组成以及在具体落地实践过程中的会遇到的问题和解决方案,这些是掌握微服务架构最基础的知识。从今天开始,我们将进一步深入微服务架构进阶的内容,也就是微服务与容器、DevOps之间的关系。它们三个虽然分属于不同领域,但却有着千丝万缕的关系,可以说没有容器的普 阅读全文
posted @ 2020-08-18 10:19 肉松蛋卷 阅读(1654) 评论(0) 推荐(0)
摘要: 经过前面几期的讲解,你应该已经对微服务的架构有了初步的了解。简单回顾一下,微服务的架构主要包括服务描述、服务发现、服务调用、服务监控、服务追踪以及服务治理这几个基本组件。 那么每个基本组件从架构和代码设计上该如何实现?组件之间又是如何串联来实现一个完整的微服务架构呢?今天我就以开源微服务框架Dubb 阅读全文
posted @ 2020-08-18 10:16 肉松蛋卷 阅读(205) 评论(0) 推荐(0)
摘要: 上一期我给你讲述了服务追踪的基本原理,有了分布式服务追踪系统,在服务出现问题的时候,我们就可以定位服务哪里出现了问题。一般单体应用改造成微服务架构后,还会增加哪些问题呢?又该如何应对呢? 前面我讲到单体应用改造为微服务架构后,服务调用由本地调用变成远程调用,服务消费者A需要通过注册中心去查询服务提供 阅读全文
posted @ 2020-08-18 10:15 肉松蛋卷 阅读(268) 评论(0) 推荐(0)
摘要: 在微服务架构下,由于进行了服务拆分,一次请求往往需要涉及多个服务,每个服务可能是由不同的团队开发,使用了不同的编程语言,还有可能部署在不同的机器上,分布在不同的数据中心。 下面这张图描述了用户访问微博首页,一次请求所涉及的服务(这张图仅作为示意,实际上可能远远比这张图还要复杂),你可以想象如果这次请 阅读全文
posted @ 2020-08-18 10:14 肉松蛋卷 阅读(254) 评论(0) 推荐(0)
摘要: 单体应用相比,在微服务架构下,一次用户调用会因为服务化拆分后,变成多个不同服务之间的相互调用,这也就需要对拆分后的每个服务都监控起来。 在讲述如何监控微服务调用前,首先你要搞清楚三个问题:监控的对象是什么?具体监控哪些指标?从哪些维度进行监控?下面就从这三个问题开始,一起来看看如何监控微服务调用。 阅读全文
posted @ 2020-08-18 10:13 肉松蛋卷 阅读(533) 评论(0) 推荐(0)
摘要: 专栏上一期我讲过,要完成一次服务调用,首先要解决的问题是服务消费者如何得到服务提供者的地址,其中注册中心扮演了关键角色,服务提供者把自己的地址登记到注册中心,服务消费者就可以查询注册中心得到服务提供者的地址,可以说注册中心犹如海上的一座灯塔,为服务消费者指引了前行的方向。 有了服务提供者的地址后,服 阅读全文
posted @ 2020-08-18 10:11 肉松蛋卷 阅读(425) 评论(0) 推荐(0)
摘要: 专栏上一期,我给你介绍了服务发布和引用常用的三种方式:RESTful API、XML配置以及IDL文件。假设你已经使用其中一种方式发布了一个服务,并且已经在一台机器上部署了服务,那我想问你个问题,如果我想调用这个服务,我该如何知道你部署的这台机器的地址呢? 这个问题就跟我想去吃肯德基一样,我可以去谷 阅读全文
posted @ 2020-08-18 10:09 肉松蛋卷 阅读(152) 评论(0) 推荐(0)
摘要: 今天我要与你分享的第一个组件是服务发布和引用。我在前面说过,想要构建微服务,首先要解决的问题是,服务提供者如何发布一个服务,服务消费者如何引用这个服务。具体来说,就是这个服务的接口名是什么?调用这个服务需要传递哪些参数?接口的返回值是什么类型?以及一些其他接口描述信息。 我前面说过,最常见的服务发布 阅读全文
posted @ 2020-08-18 10:08 肉松蛋卷 阅读(189) 评论(0) 推荐(0)
摘要: 上一期我给你讲了什么时候应该进行服务化,以及服务化拆分的两种方式即横向拆分和纵向拆分,最后还提到了引入微服务架构需要解决的问题。 我想你一定很好奇微服务架构到底是什么样子的,接下来我们一起走进微服务架构,来看看它的各个组成部分。 下面这张图是我根据自己的经验,绘制的微服务架构的模块图,在具体介绍之前 阅读全文
posted @ 2020-08-18 09:51 肉松蛋卷 阅读(185) 评论(0) 推荐(0)
摘要: 那么到底什么时候应该拆分单体应用?拆分单体应用有哪些标准可依呢? 为了解答这两个问题,今天我将通过具体案例来阐述,希望你能够学会单体应用拆分成微服务的正确姿势。 什么时候进行服务化拆分? 从我所经历过的多个项目来看,项目第一阶段的主要目标是快速开发和验证想法,证明产品思路是否可行。这个阶段功能设计一 阅读全文
posted @ 2020-08-18 09:49 肉松蛋卷 阅读(192) 评论(0) 推荐(0)
摘要: 从谷歌的搜索指数来看,微服务的热度在进入2017年后突然爆发,国内各大会议和论坛的相关讨论也如雨后春笋般层出不穷,各大一线互联网公司也纷纷将这一技术引入并在实际业务中落地。 然而据我所知,国内不少中小规模的技术团队对微服务的概念都不甚了解,对该不该引入微服务也不置可否。还有一些技术团队,没有考虑实际 阅读全文
posted @ 2020-08-18 09:48 肉松蛋卷 阅读(180) 评论(0) 推荐(0)
摘要: MySQL 上一期我讲到微博Feed的存储使用了两层的结构,为了减少对MySQL数据库的访问压力,在前面部署了Memcached缓存,挡住了99%的访问压力,只有1%的请求会访问数据库。然而对于微博业务来说,这1%的请求也有几万QPS,对于单机只能扛几千QPS的MySQL数据库来说还是太大了。为此我 阅读全文
posted @ 2020-08-18 09:46 肉松蛋卷 阅读(1046) 评论(0) 推荐(1)
摘要: 今天我们先来看微博信息流架构,也就是微博的Feed是如何构建的。首先什么是Feed呢?根据我的理解,Feed是互联网2.0时代的产物,它与互联网1.0时代的产物——门户网站最大的不同之处就是Feed不需要用户在各个板块之间来回跳转获取信息,而是把不同的信息都聚合在一起,可以供用户源源不断地访问。这里 阅读全文
posted @ 2020-08-18 09:44 肉松蛋卷 阅读(1636) 评论(0) 推荐(1)