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