大数据,架构设计,DevOps相关知识。

Hadoop的单机模式、伪分布式模式和完全分布式模式
1.单机(非分布式)模式
这种模式在一台单机上运行,没有分布式文件系统,而是直接读写本地操作系统的文件系统。
2.伪分布式运行模式
这种模式也是在一台单机上运行,但用不同的Java进程模仿分布式运行中的各类结点: (NameNode,DataNode,JobTracker,TaskTracker,SecondaryNameNode)
请注意分布式运行中的这几个结点的区别:
从分布式存储的角度来说,集群中的结点由一个NameNode和若干个DataNode组成,另有一个SecondaryNameNode作为NameNode的备份。
从分布式应用的角度来说,集群中的结点由一个JobTracker和若干个TaskTracker组成,JobTracker负责任务的调度,TaskTracker负责并行执行任务。
TaskTracker必须运行在DataNode上,这样便于数据的本地计算。JobTracker和NameNode则无须在同一台机器上。
一个机器上,既当namenode,又当datanode,或者说 既 是jobtracker,又是tasktracker。没有所谓的在多台机器上进行真正的分布式计算,故称为”伪分布式”。
3.完全分布式模式
真正的分布式,由3个及以上的实体机或者虚拟机组件的机群。

A time series database (TSDB) is a software system that is optimized for handling time series data, arrays of numbers indexed by time (a datetime or a datetime range). In some fields these time series are called profiles, curves, or traces

OpenTSDB存储的数据是时间序列数据(time series),这也是一个有趣的地方。传统关系型模型不大适合高效处理时间序列数据的存储和查询。关系型数据库厂商为解决这种问题经常会依靠一些非标准的解决方案,
例如,把时间序列数据存储成不透明的团儿(blob),然后用专用查询扩展模块进行解析。
HBase is a column-oriented database management system that runs on top of Hadoop Distributed File System (HDFS).

Bossie Awards 中对 Pulsar 点评如下:“Pulsar 旨在取代 Apache Kafka 多年的主宰地位。 Pulsar 在很多情况下提供了比 Kafka 更快的吞吐量和更低的延迟,并为开发人员提供了一组兼容的 API,
让他们可以很轻松地从 Kafka 切换到 Pulsar。Pulsar 的最大优点在于它提供了比 Apache Kafka 更简单明了、更健壮的一系列操作功能,特别在解决可观察性、地域复制和多租户方面的问题。
在运行大型 Kafka 集群方面感觉有困难的企业可以考虑转向使用 Pulsar。”

“领先的云计算公司并没有在 Cloudera 和 Hortonworks 上运行大型的 Hadoop/Spark 集群,相反,他们在容器基础设施上运行分布式云规模数据库和应用程序。现在是时候让 Hadoop 和 Spark 与时俱进了”。

Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.
kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

基于传统流处理实时计算方案 Storm、Spark Streaming、Flink 框架进行实施时,面临一系例问题阻碍,导致无法大范围推行
Storm 的算子封装和开发成本较大,但是能很好解决 1 分钟到 1 小时实时计算和离线资源释放,SQL 支持弱,业务分析团队更习惯写 SQL 做清洗和统计。
Spark Streaming 开发成本低,能解决 5 分钟 10 分钟实时批量计算,但是 1 小时计算无法释放离线资源,统计 1 分钟级结果会产生大量调度任务。
Flink 提供流式和批量结合的实时处理和完善 SQL 支持,适合完成清洗和 count 计算,但其有限时间窗口并不太适合大批量用户去重和统计。

Scala 是一门多范式的编程语言,类似于 Java 。设计初衷是实现可伸缩的语言、并集成面向对象编程和函数式编程的各种特性。在本课程中,你将可以学习到 Scala 的基础语法、类和对象、基本数据类型、控制语句以及函数等方面的知识,从而更好地来编写 Scala 应用。
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

阿里云函数计算(Function Compute)是一个事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的代码。更棒的是,您只需要为代码实际运行消耗的资源付费 – 代码未运行则不产生费用。
阿里云对象存储服务(Object Storage Service,简称OSS),

函数计算采用按需付费的方式,总费用由 调用次数费用、执行时间费用 和可能的 公网流量费用 构成。并且您每月均能 免费使用 一定额度的函数计算服务。
只有您的函数代码执行了,请求才被计费。因此:
因参数错误/权限错误/服务错误等产生的请求响应状态码为4XX/5XX的请求,是不计费的
函数代码执行,但是函数执行过程中产生错误的请求(响应状态码为200),是计费的
HTTP Trigger触发的请求,由于其响应状态码可以在函数中设置,需要根据响应头中的X-Fc-Error-Type来决定是否计费:当其值为FCCommonError时,代表函数没有执行,请求不计费;其他值则会被计费
调用次数:每月前 100 万次函数调用免费。
执行时间:每月前 400000(GB*秒) 费用免费。

早期的微服务实现主要使用 REST 架构作为事实上的通信技术。通常,RESTful 服务对于面向外部的服务会很有用,这些服务直接暴露给消费者。它们是基于传统的文本消息传递(JSON、XML、基于 HTTP 的 CVS 等),但这些消息主要是面向人类的,并不是服务间通信的理想选择。
除了使用HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。
HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。
其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Hive 将用户的HiveQL 语句通过解释器转换为MapReduce 作业提交到Hadoop 集群上,Hadoop 监控作业执行过程,然后返回作业执行结果给用户。
Hive 的最佳使用场合是大数据集的批处理作业,例如,网络日志分析。

Apache HBase是一种Key/Value系统,它运行在HDFS之上。和Hive不一样,Hbase的能够在它的数据库上实时运行,而不是运行MapReduce任务。
Hive被分区为表格,表格又被进一步分割为列簇。
每一个 key/value对在Hbase中被定义为一个cell,每一个key由row-key,列簇、列和时间戳。在Hbase中,行是key/value映射的集合,这个映射通过row-key来唯一标识。
Hive和Hbase是两种基于Hadoop的不同技术–Hive是一种类SQL的引擎,并且运行MapReduce任务,Hbase是一种在Hadoop之上的NoSQL 的Key/vale数据库。
基于文本的消息传递协议,我们还可以使用针对服务间通信而优化的二进制协议。云原生计算基金会(CNCF)的 gRPC(gRPC 远程过程调用)就是服务间通信的一个理想选择,因为它使用 protobuf 作为服务间通信的二进制数据交换格式。

SOAP 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息。
SOAP 就是被创造出来完成这个任务的。SOAP 提供了一种标准的方法,使得运行在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。

RPC服务和HTTP服务还是存在很多的不同点的,一般来说,RPC服务主要是针对大型企业的,而HTTP服务主要是针对小企业的,因为RPC效率更高,而HTTP服务开发迭代会更快。
lookupProviders,其实就是在寻找要调用的服务的实例列表。在分布式应用下,通常会有一个服务注册中心,来提供查询实例列表的功能。
查到实例列表之后要调用哪一个实例呢,只时候就需要chooseTarget了,其实内部就是一个负载均衡策略。

简单来说:SOAP = HTTP+XML+RPC
对于RPC本身可以走HTTP ,TCP等不同的协议,比如淘宝的Dubbo框架,RPC是可以选择走TCP协议还是走HTTP协议的。
SOAP是基于HTTP和XML的实现,因此会更容易做业务隔离,在系统可维护性和可扩展性上优于RPC。
而RPC是基于TCP或自定义协议的实现,性能会略好于SOAP,但是异构系统间的耦合度会更高,间接增加系统的故障率和排错难度。
RPC主要还是注重技术上面的实现,SOA注重产品、资源反复、重复利用。

面向服务的架构SOA
SOA架构中有两个主要角色:服务提供者(Provider)和服务使用者(Consumer)。
微服务架构
微服务架构在某种程度上是面向服务的架构SOA继续发展的下一步。
微服务使用轻量级HTTP、REST或Thrift API进行通信。
引用微软服务领域的先驱Martin Flower的话,他曾经说过,“我们应该把SOA看作微服务的超集”。
互操作性 – SOA通过消息中间件组件促进了多种异构协议的使用。微服务试图通过减少集成选择的数量来简化架构模式。
SOA更适合需要与许多其他应用程序集成的大型复杂企业应用程序环境。这就是说,小型应用程序不适合SOA架构,因为它们不需要消息中间件组件。而微服务架构,在另一方面,是更适合于较小和良好的分割,基于Web的系统。

CoAP(Constrained Application Protocol,受限制的应用协议),是IETF(Internet Engineering Task Force,国际互联网工程任务组)发布的互联网系列标准之一,
共包括核心协议RFC 7252和扩展协议RFC 6690、RFC 7641、RFC 7959等部分。作为应用层协议,CoAP运行于UDP传输协议之上,属于TCP/IP协议族的一个部分。
COAP协议借鉴了HTTP协议机制并简化了协议包格式。简洁地实现了物联网设备之间通信。
COAP协议通信是通过在UDP上传输消息类完成。
COAP定义了4种类型消息,来实现设备端与云端之间双向通信
CoAP也基于REST架构风格,具有简洁、清晰,且易于实现的特点。CoAP和HTTP一样,使用请求/响应工作模式:
客户端发送CoAP请求,服务器一旦侦听到请求便会根据其包含的URI对资源进行定位,并按请求方法决定如何操作该资源:读取(GET)、创建(POST)、修改(PUT)或者删除(DELETE)。
服务器处理完请求之后,将返回客户端一个CoAP响应,其中包含响应码,也可能有响应内容。

市面上有很多物联网应用层协议,CoAP、HTTP、MQTT是最常见的三种。HTTP和MQTT均使用TCP作为传输层协议,而CoAP则是基于UDP传输协议。

POC测试,即Proof of Concept,是业界流行的针对客户具体应用的验证性测试,根据用户对采用系统提出的性能要求和扩展需求的指标,在选用服务器上进行真实数据的运行,
对承载用户数据量和运行时间进行实际测算,并根据用户未来业务扩展的需求加大数据量以验证系统和平台的承载能力和性能变化。

The Internet of Things delivers the data. AI powers the insights.
Use the leading IoT platform and industry intelligence to maximize the value of your connected assets. Let’s put smart to work.™

DevOps硬性要求:工具上的准备
上文提到了工具链的打通,那么工具自然就需要做好准备。现将工具类型及对应的不完全列举整理如下:
代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion
构建工具:Ant、Gradle、maven
自动部署:Capistrano、CodeDeploy
持续集成(CI):Bamboo、Hudson、Jenkins
配置管理:Ansible、Chef、Puppet、SaltStack、ScriptRock GuardRail
容器:Docker、LXC、第三方厂商如AWS
编排:Kubernetes、Core、Apache Mesos、DC/OS
服务注册与发现:Zookeeper、etcd、Consul
脚本语言:python、ruby、shell
日志管理:ELK、Logentries
系统监控:Datadog、Graphite、Icinga、Nagios
性能监控:AppDynamics、New Relic、Splunk
压力测试:JMeter、Blaze Meter、loader.io
预警:PagerDuty、pingdom、厂商自带如AWS SNS
HTTP加速器:Varnish
消息总线:ActiveMQ、SQS
应用服务器:Tomcat、JBoss
Web服务器:Apache、Nginx、IIS
数据库:MySQL、Oracle、PostgreSQL等关系型数据库;cassandra、mongoDB、redis等NoSQL数据库
项目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker
在工具的选择上,需要结合公司业务需求和技术团队情况而定。


发表评论

电子邮件地址不会被公开。