对于架构师而言,技术的发展是无尽的,在搭建和实践智能数据架构的过程中,架构师们都会或多或少地遇到一些疑惑和挑战,如何解决在架构建设中遇到的某些问题?架构建设的领域又有什么新的行业动态和技术方法?
近日,在个推 TechDay 全国沙龙北京站的现场,几位资深架构师围绕“以智能数据架构,挖掘增长金矿”的主题,开启了对智能数据技术的深入探讨。
贝壳金服 2B2C CTO
史海峰《架构之十年磨剑,大巧不工》
在传统的 IT 行业中,企业级业务系统是技术水平的高峰,比如电信、金融、税务系统。以电信行业为例,它有其独有的行业特征:业务系统本身就是生产系统,信息化程度高;24 小时全天候跨地域不间断地提供服务;业务复杂,功能多样等。电信行业中以中国移动为代表的架构设计规划最为领先,该架构有一套完整的设计规范,整体建设周期也很长。
而在 PC 互联网时代,电子商务纷纷崛起,很多互联网电商平台都面临着从自营到平台化转变的挑战。自营与平台化最大的区别在于,自营只有一个商户,而真正的平台则需要像云计算一样,支持多商户的入驻与经营。对于架构师来说,要实现这样的平台转型,需要有清晰的业务系统架构总图、系统架构蓝图以及技术架构规划。
进入到移动互联网时代,手机的普及使得 O2O 快速发展。O2O 平台对于系统稳定性的要求非常高,而且对业务发展的响应速度也提出了新的,其所需要的技术架构非常复杂、需要有严谨的基础架构和运维机制,还要维持创新能力。
到了产业互联网时代,架构师应该对行业有更深入的理解和实践,同时,也要有相应的架构思维,从“点、线、面、体”各维度提升认知,在进行架构建设时,架构师不仅要考虑到技术上实现的可能性,也要考虑到行业特点,以及企业各个方面对于互联网技术的态度与需求。
个推平台架构主管
王志豪《微服务网关架构实践》
微服务是指,将单一的应用程序拆分成多个微小的服务,各个小服务之间低耦合,高内聚,每个小的服务可以单独进行开发,不依赖于具体的编程语言,也可以使用不同的数据存储技术,各个服务可以独立部署,拥有各自的进程,相互之间通过轻量化的机制进行通信,所有的服务共同实现具体的业务功能。
个推整体的微服务架构,主要是基于 Docker 和 Kubernetes 进行实践的。个推将应用服务分为三层,最上层是 API 网关,为服务提供统一的入口;第二层是业务逻辑层,主要实现具体的业务逻辑;最底层是基础服务层,为同一产品线下的不同产品提供共同的基础服务。
在构建整个微服务体系时,个推选择了研发自己的网关。目前市面也有很多优秀的网关产品,但都并不是特别适合个推的微服务体系。
第一,个推的配置和服务注册与发现均基于 Consul 实现的;
第二,很多的开源的网关的配置相对于个推的需求略显复杂;
第三,由于不同的功能很难用统一的网关去实现,个推更希望在 API 网关的功能扩展上保持足够的灵活性;
第四,个推的微服务体系是基于 Docker 和 Kubernetes 进行实践的,其他的网关较难直接融入个推的微服务体系。
个推选取了 OpenResty+Lua 作为实现网关的技术选型。其中 OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,Lua 则是一个较为轻量的、扩展性较强的语言。同时,个推也借鉴了 Kong 和 Orange 的插件机制,通过插件的方式实现网关功能的扩展。
个推的微服务网关的设计重点,体现在插件的设计和请求过程,每个插件都会在 OpenResty 的一个或多个阶段起作用。在进行请求处理的时候,个推会按照产品配置和插件规则筛选出具体执行的插件,然后实例化插件,对流量进行处理。个推微服务网关还有规则配置简单,不同插件实现灵活,配置基于 Conusl 实时热更新等特点。在自己的微服务网关中,个推还实现了诸如动态路由、流量控制、Auth 鉴权、链路追踪、A/B Testing 等功能。
在实践微服务网关的过程中,个推还有一些有待改进的地方,比如:网关的弹性设计不够、网关还需要进一步与 DevOps 进行结合等。
百度主任架构师
郑然《搜索引擎的大数据计算架构》
搜索引擎的建设主要分为三个方面,第一,是内容抓取部分,爬虫会将海量信息抓取下来;第二,是检索系统部分,系统需要加入对已抓取信息的内容的理解,放到索引中;第三,是索引构建部分。
支持搜索引擎计算的建库部分中,有一个非常核心的系统:Tera,它是一个大型分布式表格存储系统,可以进行高性能、可伸缩的半结构化存储,同时支持存储万亿量级的超链和网页信息。Tera 系统有八个核心技术:
1、数据模型的全局有序;
2、实时的读写和区间扫描(这一点与数据模型的全局有序也密不可分);
3、可以支持行式存储和列式存储;
4、友好的分布式文件系统;
5、利用 SSD cache 热数据;
6、数据压缩,异步 IO 和分组提交等性能优化手段;
7、支持秒级分裂合并,并且能够实现自动负载均衡;
8、在分布式数据库上实现了分布式事务。
Tera 是百度搜索引擎从批量处理迈向实时流式计算的最基础的架构,它可以提供实时的读写能力,同时提供海量存储和增量计算,并且节约增量成本。在研发方面,Tare 也能够使中间数据可见、Debug 能力增强。
本质上来说,Tera 是一个分布式存储系统,它需要遵循分布式存储系统的设计要素,包括:明确数据模型、存储引擎的设计、数据分片的方式、如何管理元数据、高可用的设计以及应用的是分层式还是竖井式的存储。同时,存储系统也需要进行性能优化工程的实践,包括指标数据的采集和可视化、先做 profiling 再手动优化、面向 SSD 进行编程、Batch&pipeline&asynchronous 和学习存储引擎的先进研究成果。
京东数科高级 DBA
潘娟《Sharding-Sphere 云架构演化》
互联网应用业务的特点是用户和数据量大、产品迭代迅速、业务组合复杂、突发性流量暴增以及 7 *24 小时不间断提供服务,这些特点导致互联网架构从一开始的单体式架构发展到分布式微服务,再到云原生架构。分布式微服务使得系统解耦可用性得到提升,而云原生架构更好地实现了资源按需伸缩、自动化的部署和管理。同时,互联网数据库也在不断地升级,由于早期的 RDBMS 无法满足数据扩展的需求,NoSQL 应运而生。再到后来,囊括分布式数据库、分布式数据库中间件以及云数据库的 NewSQL 也都纷纷顺应数据扩展的需求而产生。
作为分布式数据库的中间件,Sharding-Sphere 可以借助底层成熟的关系型数据库进行增量持续的开发,这满足了分布式的需求,并且能够大大降低运维和接入成本。
同时,Sharding-Sphere 也应该拥有四种核心能力:
1、能够通过数据拆分或读写分离,实现数据分片的能力。具体来讲,数据分片需要先通过 SQL 解析,对查询语句进行优化、合并和改写,再找到可以执行的 SQL,最终实现结果归并。
2、分布式事务能够保证数据的一致性。在数据还未打散之前,我们可以用传统的 ACID(Atomicity、Consistency、Isolation、Durability)保障数据的一致性;但在数据被打散之后,我们则需要引进新的 BASE 原则(Basically Available、Soft state、Eventual consistency)来保障数据一致。有两种方式可以实现分布式事务 BASE:一种为 XA,虽然 XA 支持回滚,能够达到强一致性,但当并发量变大,它的性能会急剧下滑;而另一种方式是柔性事务,在这种方式下,当业务量急剧上升时,并发性能只会发生略微衰退,并且能够保证,在最终达到一致。
3、数据库治理。Sharding-Sphere 可以通过注册中心的操作,实现统一管理、熔断或失效转移的功能,同时可以通过拓扑图和调用链来打造 APM 监控。
4、弹性伸缩。Sharding-Sphere 是由 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar 这 3 款相互独立的产品组成的,他们均提供标准化的数据分片、分布式事务和数据库治理功能。Sharding-JDBC 更适用于单体应用和分布式微服务,它是一个轻量级的 Java 框架;Sharding-Proxy 实现了 MySQL 的二进制协议,并且不存储任何数据;Sharding-Sidecar 的核心是 Service Mesh Sidecar,能够帮助本地的应用层与网络节点进行沟通。