架构技术演进的方向

张开发
2026/5/19 6:18:09 15 分钟阅读
架构技术演进的方向
互联网的出现不但改变了普通人的生活方式同时也促进了技术圈的快速发展和开放。在开源和分享两股力量的推动下大的方面有大数据、云计算、人工智能等细分的领域有 NoSQL、Node.js、Docker 容器化等。各个大公司也乐于将自己的技术分享出来以此来提升自己的技术影响力.对于技术人员来说技术的快速发展当然是一件大好事毕竟这意味着技术百宝箱中又多了更多的可选工具同时也可以通过学习业界先进的技术来提升自己的技术实力。但对于大多数来说除了这些好处却也多了“甜蜜的烦恼”面对层出不穷的新技术新技术基本上可以分为几个典型的派别1. 潮流派 潮流派的典型特征就是对于新技术特别热衷紧跟技术潮流当有新的技术出现时迫切想将新的技术应用到自己的产品中。NoSQL 很火咱们要大规模地切换为 NoSQL。大数据好牛呀将我们的 MySQL 切换为 Hadoop 吧。Node.js 使得 JavaScript 统一前后端这样非常有助于开展工作。2. 保守派 保守派的典型特征和潮流派正好相反对于新技术抱有很强的戒备心稳定压倒一切已经掌握了某种技术就一直用这种技术打天下。就像有句俗语说的“如果你手里有一把锤子那么所有的问题都变成了钉子”保守派就是拿着一把锤子解决所有的问题。MySQL 咱们用了这么久了很熟悉了业务用 MySQL数据分析也用 MySQL报表还用 MySQL 吧。Java 语言我们都很熟业务用 Java工具用 Java平台也用 Java。3. 跟风派 跟风派与潮流派不同这里的跟风派不是指跟着技术潮流而是指跟着竞争对手的步子走。简单来说判断技术的发展就看竞争对手竞争对手用了咱们就用竞争对手没用咱们就等等看。这项技术腾讯用了吗腾讯用了我们就用。阿里用了 Hadoop他们都在用肯定是好东西咱们也要尽快用起来以提高咱们的竞争力。Google 都用了 Docker咱们也用吧。不同派别的不同做法本质上是价值观的不同潮流派的价值观是新技术肯定能带来很大收益稳定派的价值观是稳定压倒一切跟风派的价值观是别人用了我就用。这些价值观本身都有一定的道理但如果不考虑实际情况生搬硬套就会出现“橘生淮南则为橘生于淮北则为枳”的情况。不同的派别可能存在的问题。1. 潮流派 首先新技术需要时间成熟如果刚出来就用此时新技术还不怎么成熟实际应用中很可能遇到各种“坑”自己成了实验小白鼠。其次新技术需要学习需要花费一定的时间去掌握这个也是较大的成本如果等到掌握了技术后又发现不适用则是一种较大的人力浪费。2. 保守派 保守派的主要问题是不能享受新技术带来的收益因为新技术很多都是为了解决以前技术存在的固有缺陷。就像汽车取代马车一样不是量变而是质变带来的收益不是线性变化的而是爆发式变化的。3. 跟风派 可能很多人都会认为跟风派与“潮流派”和“保守派”相比是最有效的策略既不会承担“潮流派”的风险也不会遭受“保守派”的损失花费的资源也少简直就是一举多得。看起来很美妙但跟风派最大的问题在于如果没有风可跟的时候怎么办。如果你是领头羊怎么办其他人都准备跟你的风呢另外一种情况就是竞争对手的这些信息并不那么容易获取即使获取到了一些信息大部分也是不全面的一不小心可能就变成邯郸学步了。技术演进的动力不管是潮流派、保守派还是跟风派都是站在技术本身的角度来考虑问题的只有跳出技术的范畴从一个更广更高的角度来考虑这个问题这个角度就是企业的业务发展。无论是代表新兴技术的互联网企业还是代表传统技术的制造业无论是通信行业还是金融行业的发展归根到底就是业务的发展。而影响一个企业业务的发展主要有 3 个因素市场、技术、管理这三者构成支撑业务发展的铁三角任何一个因素的不足都可能导致企业的业务停滞不前。在这个铁三角中业务处于三角形的中心毫不夸张地说市场、技术、管理都是为了支撑企业业务的发展。在专栏里我主要探讨“技术”和“业务”之间的关系和互相如何影响。我们可以简单地将企业的业务分为两类一类是产品类一类是服务类。产品类本质上和传统的制造业产品类似都是具备了某种“功能”单个用户通过购买或者免费使用这些产品来完成自己相关的某些任务用户对这些产品是独占的。服务类大量用户使用这些服务来完成需要与其他人交互的任务单个用户“使用”但不“独占”某个服务。事实上服务的用户越多服务的价值就越大。服务类的业务符合互联网的特征和本质“互联”“网”。对于产品类业务答案看起来很明显技术创新推动业务发展对于“服务”类的业务答案和产品类业务正好相反业务发展推动技术的发展为什么会出现截然相反的差别呢主要原因是用户选择服务的根本驱动力与选择产品不同。用户选择一个产品的根本驱动力是其“功能”而用户选择一个服务的根本驱动力不是功能而是“规模”。当“规模”成为业务的决定因素后服务模式的创新就成为了业务发展的核心驱动力而产品只是为了完成服务而提供给用户使用的一个载体。随便一个软件公司如果只是模仿开发出类似的产品只要愿意投入半年时间就可以将这些产品全部开发出来。但是这样做并没有意义因为用户选择的是淘宝的整套网络购物服务并且这个服务已经具备了一定的规模其他公司不具备这种同等规模服务的能力。即使开发出完全一样的产品用户也不会因为产品功能更加强大而选择新的类似产品。因此服务类的业务发展路径是这样的提出一种创新的服务模式→吸引了一批用户→业务开始发展→吸引了更多用户→服务模式不断完善和创新→吸引越来越多的用户如此循环往复。在这个发展路径中技术并没有成为业务发展的驱动力反过来由于用户规模的不断扩展业务的不断创新和改进对技术会提出越来越高的要求因此是业务驱动了技术发展。其实回到产品类业务如果我们将观察的时间拉长来看即使是产品类业务在技术创新开创了一个新的业务后后续的业务发展也会反向推动技术的发展。综合这些分析除非是开创新的技术能够推动或者创造一种新的业务其他情况下都是业务的发展推动了技术的发展。技术演进的模式业务模式千差万别有互联网的业务(淘宝、微信等)有金融的业务(中国平安、招商银行等)有传统企业的业务(各色 ERP 对应的业务)等但无论什么模式的业务如果业务的发展需要技术同步发展进行支撑无一例外是因为业务“复杂度”的上升导致原有的技术无法支撑。复杂度分类复杂度要么来源于功能不断叠加要么来源于规模扩大从而对性能和可用性有了更高的要求。既然如此判断到底是什么复杂度发生了变化就显得至关重要了。判断业务当前和接下来一段时间的主要复杂度是什么就非常关键。判断不准确就会导致投入大量的人力和时间做了对业务没有作用的事情判断准确就能够做到技术推动业务更加快速发展。互联网技术演进的模式由于各行业的业务发展轨迹并不完全相同无法给出一个统一的模板,互联网业务千差万别但由于它们具有“规模决定一切”的相同点其发展路径也基本上是一致的。互联网业务发展一般分为几个时期初创期、发展期、竞争期、成熟期。不同时期的差别主要体现在两个方面复杂性、用户规模。业务复杂性 互联网业务发展第一个主要方向就是“业务越来越复杂”1. 初创期 互联网业务刚开始一般都是一个创新的业务点这个业务点的重点不在于“完善”而在于“创新”只有创新才能吸引用户而且因为其“新”的特点其实一开始是不可能很完善的。只有随着越来越多的用户的使用通过快速迭代试错、用户的反馈等手段不断地在实践中去完善才能继续创新。初创期的业务对技术就一个要求“快”但这个时候却又是创业团队最弱小的时期可能就几个技术人员所以这个时候十八般武艺都需要用上能买就买有开源的就用开源的。2. 发展期 当业务推出后经过市场验证如果是可行的则吸引的用户就会越来越多此时原来不完善的业务就进入了一个快速发展的时期。业务快速发展时期的主要目的是将原来不完善的业务逐渐完善因此会有越来越多的新功能不断地加入到系统中。对于绝大部分技术团队来说这个阶段技术的核心工作是快速地实现各种需求只有这样才能满足业务发展的需要。如何做到“快”一般会经历下面几个阶段。堆功能期 业务进入快速发展期的初期此时团队规模也不大业务需求又很紧最快实现业务需求的方式是继续在原有的系统里面不断地增加新的功能重构、优化、架构等方面的工作即使想做也会受制于人力和业务发展的压力而放在一边。优化期 “堆功能”的方式在刚开始的时候好用因为系统还比较简单但随着功能越来越多系统开始变得越来越复杂后面继续堆功能会感到越来越吃力速度越来越慢。一种典型的场景是做一个需求要改好多地方一不小心就改出了问题。直到有一天技术团队或者产品人员再也受不了这种慢速的方式终于下定决定要解决这个问题了。如何解决这个问题一般会分为两派一派是优化派一派是架构派。优化派的核心思想是将现有的系统优化。例如采用重构、分层、优化某个 MySQL 查询语句将机械硬盘换成 SSD将数据库从 MySQL 换成 Oracle增加 Memcache 缓存等。优化派的优势是对系统改动较小优化可以比较快速地实施缺点就是可能过不了多久系统又撑不住了。架构派的核心思想是调整系统架构主要是将原来的大系统拆分为多个互相配合的小系统。例如将购物系统拆分为登录认证子系统、订单系统、查询系统、分析系统等。架构派的优势是一次调整可以支撑比较长期的业务发展缺点是动作较大、耗时较长对业务的发展影响也比较大。架构期 经过优化期后如果业务能够继续发展慢慢就会发现优化也顶不住了毕竟再怎么优化系统的能力总是有极限的。Oracle 再强大也不可能一台 Oracle 顶住 1 亿的交易量小型机再好也不可能一台机器支持 100 万在线人数。此时已经没有别的选择只能进行架构调整架构期可以用的手段很多但归根结底可以总结为一个字“拆”什么地方都可以拆。拆功能例如将购物系统拆分为登录认证子系统、订单系统、查询系统、分析系统等。拆数据库MySQL 一台变两台2 台变 4 台增加 DBProxy、分库分表等。拆服务器服务器一台变两台2 台变 4 台增加负载均衡的系统如 Nginx、HAProxy 。3. 竞争期 当业务继续发展已经形成一定规模后一定会有竞争对手开始加入行业来竞争毕竟谁都想分一块蛋糕甚至有可能一不小心还会成为下一个 BAT。当竞争对手加入后大家互相学习和模仿业务更加完善也不断有新的业务创新出来而且由于竞争的压力对技术的要求是更上一层楼了。新业务的创新给技术带来的典型压力就是新的系统会更多同时原有的系统也会拆得越来越多。两者合力的一个典型后果就是系统数量在原来的基础上又增加了很多。架构拆分后带来的美好时光又开始慢慢消逝技术工作又开始进入了“慢”的状态原来系统数量越来越多到了一个临界点后就产生了质变即系统数量的量变带来了技术工作的质变。主要体现在下面几个方面重复造轮子 系统越来越多各系统相似的工作越来越多。例如每个系统都有存储都要用缓存都要用数据库。系统交互一团乱麻 系统越来越多各系统的交互关系变成了网状。系统间的交互数量和系统的数量成平方比的关系。例如4 个系统的交互路径是 6 个10 个系统的交互路径是 45 个。每实现一个业务需求都需要几个甚至十几个系统一起改然后互相调用来调用去联调成了研发人员的灾难、联测成了测试人员的灾难、部署成了运维的灾难。针对这个时期业务变化带来的问题技术工作主要的解决手段有平台化 目的在于解决“重复造轮子”的问题。存储平台化淘宝的 TFS、京东 JFS。数据库平台化百度的 DBProxy、淘宝 TDDL。缓存平台化Twitter 的 Twemproxy豆瓣的 BeansDB、腾讯 TTC。服务化 目的在于解决“系统交互”的问题常见的做法是通过消息队列来完成系统间的异步通知通过服务框架来完成系统间的同步调用。消息队列淘宝的 Notify、MetaQ开源的 Kafka、ActiveMQ 等。服务框架Facebook 的 thrift、当当网的 Dubbox、淘宝的 HSF 等。4. 成熟期 当企业熬过竞争期成为了行业的领头羊或者整个行业整体上已经处于比较成熟的阶段市场地位已经比较牢固后业务创新的机会已经不大竞争压力也没有那么激烈此时求快求新已经没有很大空间业务上开始转向为“求精”用户规模 互联网业务的发展第二个主要方向就是“用户量越来越大”。互联网业务的发展会经历“初创期、发展期、竞争期、成熟期”几个阶段不同阶段典型的差别就是用户量的差别用户量随着业务的发展而越来越大。用户量增大对技术的影响主要体现在两个方面性能要求越来越高、可用性要求越来越高。1. 性能 用户量增大给技术带来的第一个挑战就是性能要求越来越高。以互联网企业最常用的 MySQL 为例再简单的查询再高的硬件配置单台 MySQL 机器支撑的 TPS 和 QPS 最高也就是万级低的可能是几千高的也不过几万。当用户量增长后必然要考虑使用多台 MySQL从一台 MySQL 到多台 MySQL 不是简单的数量的增加而是本质上的改变即原来集中式的存储变为了分布式的存储。2. 可用性 用户量增大对技术带来的第二个挑战就是可用性要求越来越高可用性对收入的影响也会随着用户量增大而增大。量变到质变 互联网业务驱动技术发展的两大主要因素是复杂性和用户规模而这两个因素的本质其实都是“量变带来质变”。应对业务质变带来的技术压力不同时期有不同的处理方式但不管什么样的方式其核心目标都是为了满足业务“快”的要求技术变革和发展的时候就到了。上一章: 微内核架构下一章: 互联网架构模板归类: 从0开始学架构

更多文章