从技术演变的角度看互联网后台架构

过去十多年里互联网后台架构从简单的MVC发展到如今的大数据驱动、机器学习驱动,然而是不是过去的设计就落后了?这个演变过程是如何形成的?在这过程中各种技术扮演着什么角色解决了什么问题?我们将首先从互联网后台架构的整体变化入手,探讨不同时间段的主要后台架构设计,然后聚焦在中间件的角度再来看中间件是如何从无到有,变为如今举足轻重的角色,以及各种组件所发挥的作用。
展开查看详情

1.从技术演变的角度看互联网后台架构 张力柯(Like Zhang), Turing Lab

2.About Myself 2008~2011 2013~2015 2017~现在 Core Operating System, 回国创业,移动游戏 Tencent IEG Microsoft, Redmond Turing Lab副总监 2008 2011~2012 2015~2017 University of Texas at Tagged/Funzio/Gree, BCG, Uber San Antonio, PhD in San Francisco Data platform & Mobile Computer Science

3. System Design?架构设计?Why? when management/senior team leads/architects threw a copy of the book at junior developers, expecting that they could read the book and suddenly “level up”, they were profoundly disappointed. -http://blogs.tedneward.com/post/reclaiming-design-patterns/ 设计模式的意义 • 共通的语言和词汇,帮助沟通、编写文档和探索设计方案 从较高抽象层面思考,而非具体编程语言,从而让复杂系统变得更容易分析 System • • 提升和同事讨论分析时的切入层次 • • 更容易理解现有系统 提供对设计本质的描述方式,而不仅仅是结果,从而引导更正确的决策 Design • 帮助理解设计思路,从而更有效地进行重构 -“Design Patterns”, GoF, 1994 Today

4.主题 • 后台架构的演化 • 中间件的发展

5.后台架构的演化:2000 ~ 2018

6.2000~2008:网站时代 PHP是最好的语言!Why? JSP/ASP/PHP - 业务逻辑和页面显示混写 - 两层结构(现在仍然流行于大量软件外包、业务兼职外包、淘宝网站代码中) - 高手=懂得MVC,会写JSP/PHP+Servlet(Tomcat)+DB JSP/ASP/PHP MySQL/SQLServer

7. 2009~2013:中间件时代 PHP/JSP/ASP HAProxy Tomcat Servlet 社交网站的崛起(Facebook/Twitter) Lucene/Solr - 海量数据存储 Nginx - 海量数据搜索 Memcached/Redis - 初期的推荐系统(用户推荐) - 并发能力、可用性要求大幅度提高 Python Beanstalkd/rabbitmq/ - 业务复杂度增加,开发人员数量大幅增加 zeromq Node.js DB

8. 2013~2017:大数据时代 移动互联网 客户端 ios android web others - 大数据 - 数据挖掘 - 精准用户推荐 RESTFul Service API Services - 云计算到Docker化 - 微服务到Serverless - 流计算(Stream Computing) Routing/Dispatching - DevOps - 快速迭代/AB测试 业务逻辑服务 业务逻辑服务 业务逻辑服务 (Login) (Feeds) (Favorites) 中 台 Transaction User recommendation Map/location Logging Monitoring Fraud Infrastructure(基础架构) K8s/Mesos Hive Spark Kafka DB Cache Elasticsearch

9.2018~??: AI 时代 - Machine Learning Driven Driver Rider 基于(转型)AI/机器学习的新形态公司 Airport Map - Uber/滴滴 - 饿了吗/美团 - 头条/抖音 核心机器学习平台:FBFlow 核心机器学习平台:Michelangelo 新 “SysML: The New Frontier of Training System: Unified vs Independent Machine Learning System” 的 Deployment: Evaluation/AB Test/On Demand/ML Devops Pipeline/etc. 挑 Serving: Tensorflow Serving and ?? Stanford/CMU/Google/MSFT/A 战 mazon/Intel/MIT/UCB/etc., 2019

10.Middleware

11. What is middleware? Cache •快速读取(大量读取,较少写入) •Redis, Memcached 从架构设计出发的Middleware Message Queue •非实时:异步处理信息(数据分析、机器学习) •实时:消息分发(聊天、推送) Request •Kafka, RabbitMQ, Zeromq Service Registry frontend •服务注册、发现、管理 •Zookeeper Security&Authentication Middleware •通常由应用框架自行实现 机器学习框架 •负责机器学习实现 DB •Tensorflow RPC Protocol •服务接口定义和统一(开发阶段) •Protocol Buffer, Thrift

12.Middleware v.s. 中台 Middleware 中台 针对对象 技术/开发 业务/组织 和业务逻辑绑定 No Yes 使用者 开发人员 产品/管理/PM/市场/非 技术人员 能独立实现业务需求 No Yes 示例 消息队列 用户管理 Tensorflow 交易后台管理 Springcloud(整合方案) 推荐平台

13. Why middleware? ----好友推荐系统的演化 早期代码 rs = conn.query('SELECT * FROM Mysql users WHERE sex=‘male’ Requests AND age>20 AND age<40 AND city=‘Beijing’ Sorting: O(nlgn) ORDER BY clicks DESC, comments DESC LIMIT 100’) result = shuffle(rs) O(n) *仍然存在于大量开源论坛、CMS、新闻聚合 及淘宝出售的代码系统中

14. Why middleware? ----好友推荐系统的演化 初步优化代码 – 引入缓存 复杂,过于主观 query_key= generate_query_key(user_info) Mysql arr = redis.get(query_key) If arr == NULL { Requests rs = conn.query(‘select … limit 10000’) arr = process_rs(rs) redis.put(query_key, arr) } result = shuffle(arr).slice(0,10) Redis offline key-value calculation 缺乏灵活性

15. Why middleware? ----好友推荐系统的演化 引入离线排序/搜索引擎 新用户相关信息 Mysql query_key= generate_query_key(user_info) arr = redis.get(query_key) Batch Process Requests If arr == NULL { rs = query_search_engine(user_info, type = ‘suggestions’) arr = process_rs(rs) Solr/Lucene redis.put(query_key, arr) (inverted index) } result = shuffle(arr).slice(0,10) 太慢 不满足实时场景(滴 Redis 滴/摩拜/饿了么)

16. Why middleware? ----好友推荐系统的演化 系统复杂度大幅增加,架 大数据时代 构开始messy 新用户信息 query_key= generate_query_key(user_info) arr = redis.get(query_key) Kafka If arr == NULL { Requests rs = query_search_engine(user_info, type = ‘suggestions’) arr = process_rs(rs) redis.put(query_key, arr) } Spark result = shuffle(arr).slice(0,10) Cassandra Mysql Redis Elasticsearch 数据分析、监控

17. Why middleware? ----好友推荐系统的演化 机器学习/AI时代 新用户信息 其他信息 Result = model_service.findUsers(user_info) Kafka Requests Spark AI模型 AI模型 AI模型 AI模型服务 Cassandra Hive MySQL 存储系统 机器学习模型训练

18.Machine Learning and Backend Design 传统后端系统 请求 业务逻辑 数据 逻辑规则 基于机器学习 一个图片AI检测系统框架 请求 业务逻辑 一般web请求:<1秒 数据 大数据读取(Hive): 分钟 文件上传/下载:几秒至几小时 视频处理:几分钟 • 异步结果(Asynchronous AI模型训练:几小时或几天 Result) AI模型 训练 • 并行任务(Parallel Tasks)

19. DAG(有向无环图)in Backend Architecture Spark DAG parallelize parallelize reduce join (from Wikipedia) filter filter map map map DAG(Directed Acyclic Graph) - Immutable Data Neural Network - No Cycle - Can only go from earlier to later (topological ordering) Machine Learning Platform Tesla.oa.com Programming Practice Reactive Programming RxJava RxSwift RxPy

20.Q&A

21.THANKS