3、基于go的云原生技术体系
2023-03-04 09:13:05 21 举报
AI智能生成
登录查看完整内容
基于Go的云原生技术体系是一种面向云计算环境的应用开发和部署方式,它充分利用了Go语言的高并发、高性能和简洁性特点,结合容器化、微服务、DevOps等关键技术,实现了应用的快速迭代、高可用性和弹性伸缩。在这个体系中,Go语言作为主要的开发语言,能够有效地提高开发效率和代码质量;Docker和Kubernetes等容器技术则负责实现应用的打包、分发和运行;微服务架构使得系统更加模块化、易于维护和扩展;而持续集成和持续部署(CI/CD)则保证了应用的快速交付和稳定运行。总之,基于Go的云原生技术体系为开发者提供了一种高效、可靠的云计算解决方案,有助于推动企业的数字化转型和创新。
作者其他创作
大纲/内容
开源流处理框架
其核心是用Java和Scala编写的分布式流数据流引擎。
Flink以数据并行和流水线方式执行任意流数据程序,Flink的流水线运行时系统可以执行批处理和流处理程序。
此外,Flink的运行时本身也支持迭代算法的执行
常识
所有的data在到来的时候就会被立即处理,一条接着一条
HINT: 狭隘的来说是一条接着一条,但流引擎有时会为提高性能缓存一小部分data然后一次性处理
代表就是storm和flink
Native Streaming
数据流被切分为一个一个小的批次, 然后再逐个被引擎处理
这些batch一般是以时间为单位进行切分,单位一般是‘秒‘
典型代表则是spark
另外一个基于Micro-batch实现的就是storm trident,它是对storm的更高层的抽象
基于Micro-batch
流框架基于的实现方式分为两大类
Event time&Window Operation
功能性(Functionality)
在failure之后能否恢复到故障之前的状态,并输出一致的结果;此外容错的代价也是越低越好,因为其直接影响性能。
容错性(Fault Tolerance)
性能相关的指标,高吞吐和低延迟某种意义上是不可兼得的,但好的流引擎应能兼顾高吞吐&低延时。
吞吐量(throughputs)& 延时(latency)
分支主题
总结
流框架比较的关键指标
竞品比较
Flink
1.真正的面向列的DBMS
2.数据高效压缩
3.磁盘存储的数据
多核多节点并行化大型查询。
4.多核并行处理
数据可以驻留在不同的分片上。
每个分片可以是用于容错的一组副本。
查询在所有分片上并行处理。这对用户来说是透明的。
5.在多个服务器上分布式处理
6.SQL语法支持
数据不仅按列存储,而且由矢量 - 列的部分进行处理。
这使我们能够实现高CPU性能
7.向量化引擎
支持主键表
数据使用合并树(MergeTree)进行递增排序,由于这个原因,数据可以不断地添加到表中
添加数据时无锁处理。
8.实时数据更新
9.索引
这让我们使用该系统作为Web界面的后端
低延迟意味着可以无延迟实时地处理查询,而Yandex.Metrica界面页面正在加载(在线模式)。
10.适合在线查询
系统包含用于近似计算各种值,中位数和分位数的集合函数。
支持基于部分(样本)数据运行查询并获得近似结果。在这种情况下,从磁盘检索比例较少的数据。
支持为有限数量的随机密钥(而不是所有密钥)运行聚合。在数据中密钥分发的特定条件下,这提供了相对准确的结果,同时使用较少的资源。
11.支持近似预估计算
12.支持嵌套的数据结构
13、支持数组作为数据类型
14.支持限制查询复杂性以及配额
使用异步多主复制。
写入任何可用的副本后,数据将分发到所有剩余的副本。
系统在不同的副本上保持相同的数据。数据在失败后自动恢复
15.数据复制和对数据完整性的支持
特征
不支持事务
不支持Update/Delete操作。
Windows 不支持。
支持有限操作系统。
不足
1.电信行业用于存储数据和统计数据使用。
2.新浪微博用于用户行为数据记录和分析工作。
4.信息安全里面的日志分析。
5.检测和遥感信息的挖掘。
6.商业智能。
7.网络游戏以及物联网的数据处理和价值数据分析。
8.最大的应用来自于Yandex的统计分析服务Yandex.Metrica,类似于谷歌Analytics(GA),或友盟统计,小米统计,帮助网站或移动应用进行数据分析和精细化运营工具,据称Yandex.Metrica为世界上第二大的网站分析平台。ClickHouse在这个应用中,部署了近四百台机器,每天支持200亿的事件和历史总记录超过13万亿条记录,这些记录都存有原始数据(非聚合数据),随时可以使用SQL查询和分析,生成用户报告。
应用场景
ClickHouse是开源而且免费的
商业OLAP数据库
亚马逊RedShift和谷歌的BigQuery
ClickHouse可以使用自己机器部署,无需为云付费
云解决方案
ClickHouse支持实时的高并发系统
ClickHouse不依赖于Hadoop生态软件和基础
ClickHouse支持分布式机房的部署
Hadoop生态软件
这些项目的应用的规模较小,并没有应用在大型的互联网服务当中
ClickHouse的成熟度和稳定性远远超过这些软件
开源OLAP数据库
ClickHouse可以支持从原始数据的直接查询
ClickHouse支持类SQL语言,提供了传统关系型数据的便利。
开源分析,非关系型数据库
在大数据分析领域中,传统的大数据分析需要不同框架和技术组合才能达到最终的效果
ClickHouse 正是以不依赖Hadoop 生态、安装和维护简单、查询速度快、可以支持SQL等特点在大数据分析领域越走越远。
竞品
ClickHouse
由 Apache Kylin 创始团队创建,致力于打造下一代智能数据云平台,为企业实现自动化的数据服务和管理
基于机器学习和 AI 技术,Kyligence 从多云的数据存储中识别和管理最有价值数据,并提供高性能、高并发的数据服务以支撑各种数据分析与应用,同时不断降低 TCO。
Kyligence
大数据
WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)
Websocket是一个持久化的协议
Websocket是基于HTTP协议的,或者说借用了HTTP的协议来完成一部分握手。
是真正的全双工方式,建立连接后客户端与服务器端是完全平等的,可以互相主动请求。
而HTTP长连接基于HTTP,是传统的客户端对服务器发起请求的模式。
HTTP长连接中,每次数据交换除了真正的数据部分外,服务器和客户端还要大量交换HTTP header,信息交换效率很低。
Websocket协议通过第一个request建立了TCP连接之后,之后交换的数据都不需要发送 HTTP header就能交换数据,这显然和原有的HTTP协议有区别所以它需要对服务器和客户端都进行升级才能实现(主流浏览器都已支持HTML5)
。此外还有 multiplexing、不同的URL可以复用同一个WebSocket连接等功能。这些都是HTTP长连接不能做到的。
和http区别
Websocket
分布式容器应用的可靠性
分布式容器应用的可扩展性
Kubernetes是容器编排系统
Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大,
Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。
服务发现和负载均衡
Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。
存储编排
可以使用 Kubernetes 描述已部署容器的所需状态
它可以以受控的速率将实际状态 更改为期望状态。
自动部署和回滚
Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM)。
当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。
自动完成装箱计算
Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器
并且在准备好服务之前不将其通告给客户端。
自我修复
Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。
你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。
密钥与配置管理
Kubenetes
应用运行的底层物理资源
IaaS
基础数据库服务
基础中间件服务
基础开发框架和开发套件
应用部署、管理和运维服务。
组成
通过PaaS平台这一层,SaaS层更专注于自身的业务实现,运行平台和运行中间件由PaaS层提供。
基础架构基本上都是采用Kubernetes。
应用运行的标准平台
Pass
面向业务用户的
Sass
整体架构
云
原生
表面含义(云+原生)
Cloud-Native Compute Foundation,云原生计算基金会
CNCF
以容器为基础,提高整体开发水平,形成代码和组件重用,并作为应用程序部署的独立单元。
容器化封装(docker)
通过集中式的编排调度系统来动态的管理和调度。即K8S。
动态和自动化管理(K8S)
明确服务间的依赖,互相解耦。
面向微服务
云原生三大特征
强调自动化以提升能够开发效率和运维效率。
行业规范
定义(cloud native)
低耦合+高内聚
SOA(Service-Oriented-Architecture)面向服务的架构,是把服务拼装形成应用整体的架构。
SOA中的服务是指“可重用的业务模块”。
架构区别
SOA很大程度上依赖于基于XML的消息格式和基于SOAP的通信协议,微服务架构大量的依赖于REST和JSON。
SOA架构中有ESB(服务总线)的概念,ESB负责服务之间的通信转发和接口适配,在SOA实现中,ESB处于核心地位,有很多专业的ESB厂商提供ESB中间件,例如WebSphere ESB、Oracle ESB、Dubbo等。
ESB本身是非常“重”的技术,在云化软件体系和微服务架构中,强调更轻量级、更迅速、去中心化的技术,所以在微服务架构中,不需要ESB,而通过API网关这样的技术来负责服务接口转发。(由于软件全面云化是一个过程、需要适配、调整来全面完成转变,所以在一段时间内,面对大量的遗留系统,ESB仍然会充当微服务改造过程中用来适配老系统的一个重要组件。)
SOA的设计思路是把一些组件和服务,通过服务总线组装,形成更大的应用系统(从小到大);而微服务的设计思路是把应用拆分成独立自治的小的服务(从大到小)。
SOA设计架构强调分层,通常会分为展现层、业务层、总线层和数据层。微服务架构中的服务更松散。
SOA中的服务不强调业务领域的自治性,微服务架构强调基于领域的服务自治性。
细节区别
VS SOA
微服务
开发和运维的关系
DevOps
持续交付
容器化
元素
云原生图示
整体技术栈
云原生
go
go 写的 web 框架
Gin
gRPC可以通过protobuf来定义接口,从而可以有更加严格的接口约束条件。
通过protobuf可以将数据序列化为二进制编码,这会大幅减少需要传输的数据量,从而大幅提高性能。
gRPC vs. Restful API
需要对接口进行严格约束的情况
对于性能有更高的要求时
使用场景
通信时所传递的信息是通过Protobuf定义的message数据结构进行打包,然后编译成二进制的码流再进行传输或者存储。
Protobuf实际是一套类似Json或者XML的数据传输格式和规范,用于不同应用或进程之间进行通信时使用。
足够简单
序列化后体积很小:消息大小只需要XML的1/10 ~ 1/3
解析速度快:解析速度比XML快20 ~ 100倍
多语言支持
优点
定义消息
初始化消息以及存储传输消息
读取消息并解析
使用
Protobuf
gRPC
基于go的云原生技术体系
0 条评论
回复 删除
下一页