大数跨境
0
0

架构复杂度来源:低成本、安全、规模

架构复杂度来源:低成本、安全、规模 二进制跳动
2024-04-09
2
导读:架构复杂度来源:低成本、安全、规模

当我们的服务器数量仅限于几台或许十几台时,通常我们不会太过关注成本问题。然而,当架构设计涉及到成百上千甚至数万台服务器时,成本控制便成为了一个关键的考量因素。比如,如果方案A需要部署10000台服务器,而方案B仅需8000台,仅从这个角度来看,方案B就已经实现了成本上的20%节约。而具体到数字,这意味着可以减少2000台服务器的投入,假设每台服务器每年的成本为2万元,那么一年就可以节约高达4000万元的成本。4000万元绝非小数,若将这笔钱作为奖金分配给100名团队成员,每人可获得高达40万元的奖励。通过精心设计的架构方案,节约下来的资金不仅体现了技术的力量,也为团队带来了可观的经济收益。对于技术工作者而言,能够通过自己的专业技能实现这样的成果,无疑是极大的满足和荣誉。

设计旨在实现“高性能”与“高可用性”的架构通常意味着需要部署更多的服务器资源,这与追求低成本的目标看似矛盾。低成本的追求通常意味着需要减少服务器的数量。因此,在架构设计中,低成本往往不是首要目标,而是作为一种附加的约束条件存在。也就是说,我们需要首先设定一个成本目标,在满足“高性能”和“高可用性”的前提下,检验所设计的方案是否能够符合预定的成本目标。如果不能,那就必须重新进行架构设计。若在任何情况下都无法满足成本要求,那最终可能只能向管理层申请调整成本预期。

类似的新技术例子很多,我来举几个。

NoSQL(Memcache、Redis 等)的出现是为了解决关系型数据库无法应对高并发访问带来的访问压力。

全文搜索引擎(Sphinx、Elasticsearch、Solr)的出现是为了解决关系型数据库 like 搜索的低效的问题。

Hadoop 的出现是为了解决传统文件系统无法应对海量数据存储和计算的问题。

为了应对PHP的效率问题,Facebook最初采取了HipHop PHP的解决方案,该方案将PHP代码转换为C++代码执行。随后,Facebook转向使用HHVM(HipHop Virtual Machine),将PHP代码转换为字节码,然后由虚拟机执行,这一做法与Java的JVM类似。

新浪微博在其架构中采取了从传统的Redis/MC + MySQL模式转变为Redis/MC + SSD Cache + MySQL的方式。通过将SSD Cache作为第二层缓存,不仅解决了MC/Redis因成本过高且容量有限的问题,同时也缓解了直接访问数据库所带来的压力。

LinkedIn为了处理每日高达五千亿的事件,开发了高效的Kafka消息系统。还有许多其他例子,如将Ruby on Rails替换为Java,或将Lua + Redis替换为Go语言实现等,这些都是技术创新的体现。

引入或创造新技术都是一项复杂的工作。引入新技术主要的挑战在于需要熟悉并整合新旧技术。而创造新技术则需要开发全新的理念和技术,并确保这些新技术相比旧技术有显著的改进。

相较之下,创造新技术的复杂度通常更高。因此,中小型公司通常通过引入新技术来降低成本;而大型公司则更有可能通过自主创新新技术来实现低成本目标,这是因为大公司拥有足够的资源、技术背景和时间来进行技术创新。

安全

1.功能安全

从技术的角度来讲,安全可以分为两类:一类是功能上的安全,一类是架构上的安全。

系统的安全漏洞,如XSS攻击、CSRF攻击、SQL注入、Windows漏洞以及密码破解等,本质上源于系统的不完善,为黑客提供了可利用的空间。这些黑客的行为可以比作小偷,他们利用系统或家庭安全的弱点进行入侵,目的是破坏或盗窃。因此,功能安全可以被形象地描述为“防盗”。

从实施的角度出发,功能安全主要与编码实践相关,并非与系统架构密切相关。目前,许多开发框架已经内置了防御常见安全威胁的机制,这大大降低了开发者在安全功能上的工作量。然而,这些框架虽能防范已知的安全威胁(如XSS攻击、CSRF攻击和SQL注入等),但对于新出现的安全挑战却无能为力。同时,开发框架本身也可能存在漏洞,如Apache Struts2就曾多次爆出严重安全漏洞,引起广泛的担忧。

历史上的一些大规模信息安全事件,如2016年雅虎的大规模用户信息泄露、美国东海岸的大规模DDoS攻击,以及浙江慧达驿站网络公司的客户信息泄露事件,都突显了功能安全的重要性和紧迫性。这些事件不仅造成了巨大的经济损失,还给社会和个人带来了严重的后果。

因此,功能安全是一个持续进化的过程。安全措施往往是在安全漏洞被发现后才被提出和实施,我们永远无法完全预测系统的下一个安全漏洞会出现在哪里,也不能保证系统绝对安全。换言之,功能安全是一个持续的“攻防战”,只能通过不断的迭代和完善来增强,而不可能通过一次性的系统架构设计来彻底解决。

2.架构安全

将功能安全比作“防小偷”的话,架构安全则可视为“抵御强盗”。强盗可能采用更为粗暴的手段,比如使用大锤破门或用炸药炸开围墙,不同于小偷的隐秘盗窃,强盗往往目的在于破坏,对系统造成的损害更为严重。在设计架构时,考虑到互联网的开放性,几乎全球任何角落的攻击者都可能成为威胁,因此架构安全成为必须重点关注的问题。

历史上,架构安全依赖于防火墙来实现,其基本作用是对网络进行隔离,通过划分不同的网络区域并设定区域间的访问控制策略,从而控制数据流的传输。一个典型例子是银行系统的安全架构,通过在不同的网络分区部署防火墙来保障系统安全。

尽管防火墙功能强大,但其性能限制使其在互联网行业的应用并不广泛。互联网业务特点是面对海量用户访问和高并发需求,防火墙往往无法满足这种性能要求。特别是面对DDoS攻击——这类攻击可能轻则数GB,重则数十GB带宽——如2016年布莱恩·克莱布斯的安全博客遭遇的665Gbps DDoS攻击,已是网络犯罪领域已知最大规模的拒绝服务攻击。

为了抵御这种规模的攻击,若依赖防火墙,可能需要部署大量设备,成本高昂。比如,一个中高端防火墙的价格可能达到10万元,抗击约25GB流量,面对巨大的DDoS攻击则需部署近30台防火墙,成本接近300万元,还不包括维护费用,而这些设备在平时可能并不发挥作用。

即便企业资金充足,也不太可能仅靠堆砌防火墙来防御DDoS攻击。DDoS攻击的主要危害是消耗大量的机房出口带宽,无论防火墙的处理能力有多强,一旦出口带宽被耗尽,对用户而言,业务就是不可用的。因为正常的用户请求无法到达系统,虽然防火墙可以保护内部系统不受攻击,但对用户来说,业务已经无法使用,用户并不会在乎是因为自己无法访问还是系统本身故障造成的不可用。

规模

许多企业级系统,虽然对性能、高可用性和扩展性的要求并不高,但提及这类系统时,常有人评价它们为“极其复杂”。原因何在呢?这主要是因为这类系统功能繁多,逻辑分支众多,尤其是那些历经长时间发展而逐渐叠加了众多功能的系统。随着时间的推移,新加入的团队成员可能对系统的发展历程不甚了解,甚至对许多功能的实际应用场景和细节都一知半解,这使得他们面对的似乎是一个难以理解、难以修改、不敢轻易触碰、难以修复的“黑盒”。因此,这种系统的复杂性自然而然地显得非常之高。


随着系统规模的扩大,复杂度的增长往往遵循“量变引起质变”的规律。也就是说,一旦系统的规模超过某个临界点,其复杂度就会发生根本性的变化。这种规模增长带来的复杂度表现在多个方面,其中之一就是系统的功能数量增加,导致整体复杂度呈现指数级的上升。

举个例子,设想一个最初仅包含3个主要功能的系统,随着时间推移,这个系统的功能增加到了8个。尽管表面上看似仅增加了5个功能,但系统的整体复杂度却有了显著的提高。为了理解这种变化,我们可以通过一个简化的模型来进行说明:如果假设系统内各功能之间均存在相互联系,那么系统的复杂度可以通过以下方式计算——系统复杂度 = 功能的总数 + 功能间的关联数。

通过计算,我们发现,具有8个功能的系统复杂度并非仅仅比拥有3个功能的系统高出5个单位,而是增加了一个更为显著的数值,即30个单位。这种复杂度的急剧上升主要是因为功能间的相互关联随着功能数量的增加而呈指数级增长。下面的图形可以直观地展示出功能数量增加是如何引起系统复杂度的增长。

2. 数据越来越多,系统复杂度发生质变

在近年来,随着数据量的剧增,我们进入了所谓的“大数据”时代。这个概念之所以变得流行,主要是因为当数据积累到一定程度时,传统的数据处理方法——包括数据的收集、处理、存储和分析——变得不再适用。这种现象的出现迫切需要采用新的技术手段来应对。大数据作为一个独立的技术领域的兴起,很大程度上得益于Google发表的三篇开创性论文,分别介绍了Google文件系统(Google File System)作为大数据存储的理论基础,Google Bigtable作为列式数据库的理论基础,以及Google MapReduce作为大规模数据处理的理论基础,这三篇论文各自奠定了新技术领域的基础。

即使数据量没有达到典型的大数据规模,数据的增长仍旧可能对系统造成复杂性的增加。一个常见的实例是使用关系数据库来存储数据时面临的挑战。以MySQL数据库为例,根据不同的业务需求和应用场景,单个表的数据量会有一个最优阈值,通常推荐不超过5000万行。然而,随着业务的扩展,如果某个表的数据行数增长到10亿行,系统就会遭遇一系列问题。例如,添加一个索引可能需要耗时数小时,在这期间,数据库表无法进行数据插入操作,实质上造成了业务的暂停。表结构的修改和索引的添加会面临相似的挑战,耗时可能会非常长。即便是有了索引,当数据量庞大时,索引的效率也可能大打折扣。此外,对数据库进行备份的时间也会大幅增加。

更多资料可以参考我的另外一篇公众号内容:

如何全面提升架构设计的质量


【声明】内容源于网络
0
0
二进制跳动
15 年 + 技术老兵 架构师|技术总监|科技创业技术合伙人 曾任职苏宁科技、电讯盈科、联想云 专注架构设计与技术落地
内容 739
粉丝 0
二进制跳动 15 年 + 技术老兵 架构师|技术总监|科技创业技术合伙人 曾任职苏宁科技、电讯盈科、联想云 专注架构设计与技术落地
总阅读385
粉丝0
内容739