广州地铁是一个优美的 Serverless Web 系统

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
函数计算FC,每月15万CU 3个月
简介: 转载自 http://www.bullshitprogram.com/guangzhou-metro/

web 本质是一种流量,一种数据的流转。当前的 web 只是 Serverless 的一种特例(存活期很长的 Serverless )。如果从这个角度上看,其实广州地铁是一个很优美的 Serverless 系统。

高效率的web,本质是一种希望数据的流转尽可能快(TPS越高越好),这跟广州的地铁的设计理念是不谋而合的。我之前在知乎上说过,广州地铁本质上是一个排水系统 ,他设计的目的不是把你运送到目的地,而是希望你尽快离站。所以现在就算你进站后再出站,也要收费(以前有一段时间我记得不用)。

回到本题。 Serverless 是一种存活期相对较短的设计。比如广州地铁的存活期一般是日间,到了夜间设备要进行维护。我们把整个问题简单化,只取一号线来讲。假设平时只运行 3~50 辆车。那么低峰期应该只运行3辆车(降低成本),高峰期应该在确保安全的前提下,把运营效率尽可能提高(增加班次)。而到了晚上,众鸟归巢。运行实例为0。

Serverless 的优势

减少成本:每一个站台只需要少量的广州地铁人员,就能撑起一个站点。地铁工作人员无需关注底层系统(地铁)的运维。他们只需要在调度室吹空调,按按这个按按那个按钮就行。

快速创新:以前广州地铁需要人工买票什么的,现在支持银联卡,NFC,微信,支付宝计费。

按需使用、灵活弹性:业务可以根据配置的条件灵活调配资源,它会在夜间睡觉(运行实例为0),在低峰期低开(运行实例为3),在高峰期高开(运行实例50),在超高峰期限流,从而实现资源的最大化利用与运营成本的压缩。

广州地铁其实是一种实时数据流处理

从乘客角度,搭地铁本质上是一种数据库事务。
持久性(Durability)是妹子要么上车,要么不决定搭地铁;
一致性(Consistency)是指妹子上车下车会按照她的期望值,如果她下错站了,说明了她没有实现一致性;
隔离性(Isolation)是指妹子懒得理你;
持久性(Durability)是指妹子上车这一行为有地铁系统作证(上下车买票的凭证)。

而从地铁角度,整个广州地铁其实是实现了分布式事务的一套实时数据流处理系统。

广州地铁2020

前端常驻,后端动态高效伸缩容

我们会发现,那些固定设施都固定在那里的。基础设施是一种“前端”。而地铁列车是一种“后端”。

因为广州地铁事关人命,所以在伸缩容方面采取的策略是根据过往数据预测未来。而伸缩容目前是用人工方式解决。

这一点也是一种提醒。我们在设计 web 系统的时候通常分前后端。如果按照 Serverless 角度来重新思考这个问题。那么应该让前端资源常驻(前端只是一些简单的静态文件,占用服务器资源很少),而让后端动态伸缩。这样就不会影响用户体验。

流量切分

高峰期广州地铁的运营人员会设置各个栅栏。超高峰期会飞站或者拒绝乘客搭乘。从而实现数据的安全(乘客的安全)。

计量能力

根据乘客的搭乘距离计费。而站台距离本质上是时间。可以说使用时间越长,费用越高。

后端的单一职责

基本上广州地铁是偏向于人运,而不是货运。每次我要搬家的时候,搭广州地铁总是相对比较麻烦。因为一开始我也说了,广州地铁的设计理念就是一个排水系统。如果变成货运的话,运营效率会大幅度降低。

所以,我们在设计 Serverless 后端微服务的时候,也要记住这一点。尽可能让后端微服务的职责尽可能小,小到甚至不需要微服务发现系统。举个例子,xx网盘通过 Serverless 服务处理瞬时的视频转码请求。

结论

广州地铁其实是一个运营很高效的 Serverless 系统。它总结了过往数十年的人流量数据,高效运营的同时保证乘客的安全(数据安全)。

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
21天前
|
存储 消息中间件 缓存
构建互联网高性能WEB系统经验总结
构建互联网高性能WEB系统经验总结
|
1月前
|
机器学习/深度学习 数据处理 数据库
基于Django的深度学习视频分类Web系统
基于Django的深度学习视频分类Web系统
53 4
基于Django的深度学习视频分类Web系统
|
18天前
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
48 2
|
1月前
|
机器学习/深度学习 监控 数据挖掘
基于Django和百度飞桨模型的情感识别Web系统
基于Django和百度飞桨模型的情感识别Web系统
37 5
|
2月前
|
网络协议 Windows
[收藏]优化基于Win 2000系统的Web服务器性能
[收藏]优化基于Win 2000系统的Web服务器性能
|
3月前
|
API 数据库 开发者
解锁Web2py新境界!揭秘如何利用神秘插件系统,让你的Web项目瞬间起飞?
【8月更文挑战第31天】Web2py是一款轻量级且功能全面的Python Web框架,其插件系统允许开发者在不修改核心代码的情况下扩展框架功能,提升项目灵活性和可扩展性。本文介绍如何利用Web2py插件系统增强Web项目,包括插件的优势、选择与安装方法,并通过集成身份认证插件的具体示例展示其应用过程。通过合理利用插件,可以显著提高开发效率和用户体验。
53 1
|
3月前
|
缓存 NoSQL 数据库
Web服务器与数据库优化:提升系统性能的最佳实践
【8月更文第28天】在现代的Web应用中,Web服务器与后端数据库之间的交互是至关重要的部分。优化这些组件及其相互作用可以显著提高系统的响应速度、吞吐量和可扩展性。本文将探讨几种常见的优化策略,并提供一些具体的代码示例。
166 1
|
3月前
|
C# 数据可视化 开发者
WPF开发者福音:深度解析OxyPlot与LiveCharts图表库,轻松实现数据可视化不再是难题!
【8月更文挑战第31天】在WPF应用中,数据可视化对提升用户体验至关重要。本文介绍并演示了两种流行图表库OxyPlot和LiveCharts的集成与使用方法。OxyPlot是一款适用于.NET应用的开源图表库,提供多种图表类型,易于集成。LiveCharts则以其丰富的图表类型和动画效果,特别适合实时数据展示。通过具体代码示例,本文展示了如何利用这两种图表库创建折线图和柱状图,并详细说明了安装和配置步骤。希望本文能帮助开发者在WPF应用中轻松实现高效、美观的数据可视化。
190 0
|
3月前
|
前端开发 开发者 C#
WPF开发者必读:MVVM模式实战,轻松实现现代桌面应用架构,让你的代码更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,MVVM(Model-View-ViewModel)模式通过分离应用程序的逻辑和界面,提高了代码的可维护性和可扩展性。本文介绍了MVVM模式的三个核心组件:Model(数据模型)、View(用户界面)和ViewModel(处理数据绑定和逻辑),并通过示例代码展示了如何在WPF项目中实现MVVM模式。通过这种方式,开发者可以构建更加高效和可扩展的桌面应用程序。
159 0
|
3月前
|
开发者 Java 安全
Struts 2 实战秘籍:Action 驱动业务,配置文件成就高效开发!
【8月更文挑战第31天】Struts 2 框架作为 Apache 软件基金会的顶级项目,广泛应用于企业级 Web 应用开发。其核心组件 Action 类处理用户请求,而配置文件定义请求与 Action 类间的映射关系。掌握 Action 组件的最佳实践包括继承 `ActionSupport` 类、实现 `execute` 方法及使用类型安全的方法;配置文件的最佳实践则涉及组织 Action 到包中、定义全局结果及使用通配符映射。遵循这些最佳实践,可构建高效、可维护的 Web 应用程序。
41 0

热门文章

最新文章

相关产品

  • 函数计算