首页 文章 精选 留言 我的

精选列表

搜索[心智成长],共7684篇文章
优秀的个人博客,低调大师

架构成长之路:分布式系统如何设计,看看Elasticsearch是怎么做的

【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 分布式系统类型多,涉及面非常广,不同类型的系统有不同的特点,批量计算和实时计算就差别非常大。这篇文章中,重点会讨论下分布式数据系统的设计,比如分布式存储系统,分布式搜索系统,分布式分析系统等。 我们先来简单看下Elasticsearch的架构。 Elasticsearch 集群架构 Elasticsearch是一个非常著名的开源搜索和分析系统,目前被广泛应用于互联网多种领域中,尤其是以下三个领域特别突出。一是搜索领域,相对于solr,真正的后起之秀,成为很多搜索系统的不二之选。二是Json文档数据库,相对于MongoDB,读写性能更佳,而且支持更丰富的地理位置查询以及数字、文本的混合查询等。三是时序数据分析处理,目前是日志处理、监控数据的存储、分析和可视化方面做得非常好,可以说是该领域的***者了。 Elasticsearch的详细介绍可以到官网查看。我们先来看一下Elasticsearch中几个关键概念: 节点(Node):物理概念,一个运行的Elasticearch实例,一般是一台机器上的一个进程。 索引(Index),逻辑概念,包括配置信息mapping和倒排正排数据文件,一个索引的数据文件可能会分布于一台机器,也有可能分布于多台机器。索引的另外一层意思是倒排索引文件。 分片(Shard):为了支持更大量的数据,索引一般会按某个维度分成多个部分,每个部分就是一个分片,分片被节点(Node)管理。一个节点(Node)一般会管理多个分片,这些分片可能是属于同一份索引,也有可能属于不同索引,但是为了可靠性和可用性,同一个索引的分片尽量会分布在不同节点(Node)上。分片有两种,主分片和副本分片。 副本(Replica):同一个分片(Shard)的备份数据,一个分片可能会有0个或多个副本,这些副本中的数据保证强一致或最终一致。 用图形表示出来可能是这样子的: Index 1:蓝色部分,有3个shard,分别是P1,P2,P3,位于3个不同的Node中,这里没有Replica。 Index 2:绿色部分,有2个shard,分别是P1,P2,位于2个不同的Node中。并且每个shard有一个replica,分别是R1和R2。基于系统可用性的考虑,同一个shard的primary和replica不能位于同一个Node中。这里Shard1的P1和R1分别位于Node3和Node2中,如果某一刻Node2发生宕机,服务基本不会受影响,因为还有一个P1和R2都还是可用的。因为是主备架构,当主分片发生故障时,需要切换,这时候需要选举一个副本作为新主,这里除了会耗费一点点时间外,也会有丢失数据的风险。 Index流程 建索引(Index)的时候,一个Doc先是经过路由规则定位到主Shard,发送这个doc到主Shard上建索引,成功后再发送这个Doc到这个Shard的副本上建索引,等副本上建索引成功后才返回成功。 在这种架构中,索引数据全部位于Shard中,主Shard和副本Shard各存储一份。当某个副本Shard或者主Shard丢失(比如机器宕机,网络中断等)时,需要将丢失的Shard在其他Node中恢复回来,这时候就需要从其他副本(Replica)全量拷贝这个Shard的所有数据到新Node上构造新Shard。这个拷贝过程需要一段时间,这段时间内只能由剩余主副本来承载流量,在恢复完成之前,整个系统会处于一个比较危险的状态,直到failover结束。 这里就体现了副本(Replica)存在的一个理由,避免数据丢失,提高数据可靠性。副本(Replica)存在的另一个理由是读请求量很大的时候,一个Node无法承载所有流量,这个时候就需要一个副本来分流查询压力,目的就是扩展查询能力。 角色部署方式 接下来再看看角色分工的两种不同方式: Elasticsearch支持上述两种方式: 1.混合部署(左图) 默认方式。 不考虑MasterNode的情况下,还有两种Node,Data Node和Transport Node,这种部署模式下,这两种不同类型Node角色都位于同一个Node中,相当于一个Node具备两种功能:Data和Transport。 当有index或者query请求的时候,请求随机(自定义)发送给任何一个Node,这台Node中会持有一个全局的路由表,通过路由表选择合适的Node,将请求发送给这些Node,然后等所有请求都返回后,合并结果,然后返回给用户。一个Node分饰两种角色。 好处就是使用极其简单,易上手,对推广系统有很大价值。最简单的场景下只需要启动一个Node,就能完成所有的功能。 缺点就是多种类型的请求会相互影响,在大集群如果某一个Data Node出现热点,那么就会影响途经这个Data Node的所有其他跨Node请求。如果发生故障,故障影响面会变大很多。 Elasticsearch中每个Node都需要和其余的每一个Node都保持13个连接。这种情况下, - 每个Node都需要和其他所有Node保持连接,而一个系统的连接数是有上限的,这样连接数就会限制集群规模。 还有就是不能支持集群的热更新。 2.分层部署(右图): 通过配置可以隔离开Node。 设置部分Node为Transport Node,专门用来做请求转发和结果合并。 其他Node可以设置为DataNode,专门用来处理数据。 缺点是上手复杂,需要提前设置好Transport的数量,且数量和Data Node、流量等相关,否则要么资源闲置,要么机器被打爆。 好处就是角色相互独立,不会相互影响,一般Transport Node的流量是平均分配的,很少出现单台机器的CPU或流量被打满的情况,而DataNode由于处理数据,很容易出现单机资源被占满,比如CPU,网络,磁盘等。独立开后,DataNode如果出了故障只是影响单节点的数据处理,不会影响其他节点的请求,影响限制在最小的范围内。 角色独立后,只需要Transport Node连接所有的DataNode,而DataNode则不需要和其他DataNode有连接。一个集群中DataNode的数量远大于Transport Node,这样集群的规模可以更大。另外,还可以通过分组,使Transport Node只连接固定分组的DataNode,这样Elasticsearch的连接数问题就彻底解决了。 可以支持热更新:先一台一台的升级DataNode,升级完成后再升级Transport Node,整个过程中,可以做到让用户无感知。 上面介绍了Elasticsearch的部署层架构,不同的部署方式适合不同场景,需要根据自己的需求选择适合的方式。 Elasticsearch 数据层架构 接下来我们看看当前Elasticsearch的数据层架构。 数据存储 Elasticsearch的Index和meta,目前支持存储在本地文件系统中,同时支持niofs,mmap,simplefs,smb等不同加载方式,性能***的是直接将索引LOCK进内存的MMap方式。默认,Elasticsearch会自动选择加载方式,另外可以自己在配置文件中配置。这里有几个细节,具体可以看官方文档。 索引和meta数据都存在本地,会带来一个问题:当某一台机器宕机或者磁盘损坏的时候,数据就丢失了。为了解决这个问题,可以使用Replica(副本)功能。 副本(Replica) 可以为每一个Index设置一个配置项:副本(Replicda)数,如果设置副本数为2,那么就会有3个Shard,其中一个是PrimaryShard,其余两个是ReplicaShard,这三个Shard会被Mater尽量调度到不同机器,甚至机架上,这三个Shard中的数据一样,提供同样的服务能力。 副本(Replica)的目的有三个: 保证服务可用性:当设置了多个Replica的时候,如果某一个Replica不可用的时候,那么请求流量可以继续发往其他Replica,服务可以很快恢复开始服务。 保证数据可靠性:如果只有一个Primary,没有Replica,那么当Primary的机器磁盘损坏的时候,那么这个Node中所有Shard的数据会丢失,只能reindex了。 提供更大的查询能力:当Shard提供的查询能力无法满足业务需求的时候, 可以继续加N个Replica,这样查询能力就能提高N倍,轻松增加系统的并发度。 问题 上面说了一些优势,这种架构同样在一些场景下会有些问题。 Elasticsearch采用的是基于本地文件系统,使用Replica保证数据可靠性的技术架构,这种架构一定程度上可以满足大部分需求和场景,但是也存在一些遗憾: Replica带来成本浪费。为了保证数据可靠性,必须使用Replica,但是当一个Shard就能满足处理能力的时候,另一个Shard的计算能力就会浪费。 Replica带来写性能和吞吐的下降。每次Index或者update的时候,需要先更新Primary Shard,更新成功后再并行去更新Replica,再加上长尾,写入性能会有不少的下降。 当出现热点或者需要紧急扩容的时候动态增加Replica慢。新Shard的数据需要完全从其他Shard拷贝,拷贝时间较长。 上面介绍了Elasticsearch数据层的架构,以及副本策略带来的优势和不足,下面简单介绍了几种不同形式的分布式数据系统架构。 分布式系统 ***种:基于本地文件系统的分布式系统 上图中是一个基于本地磁盘存储数据的分布式系统。Index一共有3个Shard,每个Shard除了Primary Shard外,还有一个Replica Shard。当Node 3机器宕机或磁盘损坏的时候,首先确认P3已经不可用,重新选举R3位Primary Shard,此Shard发生主备切换。然后重新找一台机器Node 7,在Node7 上重新启动P3的新Replica。由于数据都会存在本地磁盘,此时需要将Shard 3的数据从Node 6上拷贝到Node7上。如果有200G数据,千兆网络,拷贝完需要1600秒。如果没有replica,则这1600秒内这些Shard就不能服务。 为了保证可靠性,就需要冗余Shard,会导致更多的物理资源消耗。 这种思想的另外一种表现形式是使用双集群,集群级别做备份。 在这种架构中,如果你的数据是在其他存储系统中生成的,比如HDFS/HBase,那么你还需要一个数据传输系统,将准备好的数据分发到相应的机器上。 这种架构中为了保证可用性和可靠性,需要双集群或者Replica才能用于生产环境,优势和副作用在上面介绍Elasticsearch的时候已经介绍过了,这里就就不赘述了。 Elasticsearch使用的就是这种架构方式。 第二种:基于分布式文件系统的分布式系统(共享存储) 针对***种架构中的问题,另一种思路是:存储和计算分离。 ***种思路的问题根源是数据量大,拷贝数据耗时多,那么有没有办法可以不拷贝数据?为了实现这个目的,一种思路是底层存储层使用共享存储,每个Shard只需要连接到一个分布式文件系统中的一个目录/文件即可,Shard中不含有数据,只含有计算部分。相当于每个Node中只负责计算部分,存储部分放在底层的另一个分布式文件系统中,比如HDFS。 上图中,Node 1 连接到***个文件;Node 2连接到第二个文件;Node3连接到第三个文件。当Node 3机器宕机后,只需要在Node 4机器上新建一个空的Shard,然后构造一个新连接,连接到底层分布式文件系统的第三个文件即可,创建连接的速度是很快的,总耗时会非常短。 这种是一种典型的存储和计算分离的架构,优势有以下几个方面: 在这种架构下,资源可以更加弹性,当存储不够的时候只需要扩容存储系统的容量;当计算不够的时候,只需要扩容计算部分容量。 存储和计算是独立管理的,资源管理粒度更小,管理更加精细化,浪费更少,结果就是总体成本可以更低。 负载更加突出,抗热点能力更强。一般热点问题基本都出现在计算部分,对于存储和计算分离系统,计算部分由于没有绑定数据,可以实时的扩容、缩容和迁移,当出现热点的时候,可以***时间将计算调度到新节点上。 这种架构同时也有一个不足:访问分布式文件系统的性能可能不及访问本地文件系统。在上一代分布式文件系统中,这是一个比较明显的问题,但是目前使用了各种用户态协议栈后,这个差距已经越来越小了。HBase使用的就是这种架构方式。 Solr也支持这种形式的架构。 总结 上述两种架构,各有优势和不足,对于某些架构中的不足或缺陷,思路不同,解决的方案也大相径庭,但是思路跨度越大,收益一般也越大。 上面只是介绍了分布式数据(存储/搜索/分析等等)系统在存储层的两种不同架构方式,希望能对大家有用。但是分布式系统架构设计所涉及的内容广,细节多,权衡点众,如果大家对某些领域或者方面有兴趣,也可以留言,后面再探讨。

优秀的个人博客,低调大师

四招解锁 HarmonyOS 开发者成长计划,免费资料大奖拿到手软

为了让大家快人一步,迅速从入门小白晋级技术大神,我们集结HarmonyOS技术专家,为应用开发者量身打造了一个路径最短、可实操性最强的学习路线。 包括学习HarmonyOS最新特性和界面开发、熟悉HarmonyOS系统框架,以及开发HarmonyOS应用。 我们收集了工具、教程、详解视频等可实操的学习资料,可以帮你在学习应用开发中事半功倍。 Step1初学乍练(3-5周,每周4-6小时) 目标 掌握HarmonyOS应用开发编程语言,了解HarmonyOS系统概述并搭建HUAWEI DevEco Studio集成开发环境 。 路径 在学习HarmonyOS之前,大家需要熟练使用编程语言。HarmonyOS使用了Java UI和JS UI两种UI框架,开发者可自主选择Java或JS进行HarmonyOS应用开发。 • Java编程语言 − 基本数据类型、变量和常量、运算符、表达式、条件分支结构、循环结构 − 字符串、数组、方法、正则表达式、基本排序算法 − 面向对象设计思想(抽象,封装,继承,多态) − 异常体系结构(异常顶层继承结构;try/catch/finally;try with resources; throw/throws;线程/线程池的异常默认处理器) − 集合框架(集合接口级继承结构;基于Tree/Linked/Hash的集合;WeakReference集合、集合大小初始化;Collection;Arrays) − 输入输出流(常用InputStream/OutputStream;常用Reader/Writer、NIO) − 多线程(Runnable;Callable;synchronized;notify/notifyAll/wait;sleep;线程的状态转换;volatile;线程池) − 其他高级语言特性(网络编程、泛型、注解、序列化、反射机制、Java虚拟机、Java 8、JSON解析等) •JS编程语言 −HML(HarmonyOS Markup Language,基本标签、表格标签、div标签等) − CSS(CSS3基本语法、标签选择器、Id选择器、Class选择器、浮动、定位属性、盒子模型等) − JavaScript(JS基础语法、系统函数、自定义函数、匿名函数、常见事件、数组、字符串、日期对象等) •HarmonyOS系统概述 − HarmonyOS的系统定义、技术特性、系统安全等基本知识 − 应用开发的基础知识、应用配置文件、资源文件等 •HUAWEI DevEco Studio集成开发环境 −下载并安装HUAWEI DevEco Studio https://developer.harmonyos.com/cn/develop/deveco-studio#download − 注册华为开发者账号,真机运行应用还需申请调试证书 − 了解应用开发、编译构建、应用运行、应用调试、应用测试、应用发布等基本流程 了解应用开发、编译构建、应用运行、应用调试、应用测试、应用发布等基本流程之后,大家就可以正式开始HarmonyOS应用开发之旅了。 Tips 大家可以参考下面的资料,快速完成编程语言的学习: − Java学习资料:《Java编程思想》、《Java核心技术》、《Java经典实例》等书籍 − JS学习资料:《JavaScript权威指南》、《JavaScript高级程序设计》等书籍 如果你已经具备Java或JS相关的语言基础可以跳过本章节的学习;如果你是刚刚入门,建议先学习编程语言,夯实代码基础。 学习过程中遇到任何困难,也可前往HarmonyOS官方论坛发帖求助 https://developer.huawei.com/consumer/cn/forum/block/harmonyos Step2渐入佳境(4-6周,每周6-8小时) 目标 HarmonyOS界面开发,主要包括: Ability及其生命周期、公共事件与通知、HarmonyOS Java UI组件应用、HarmonyOS JS UI组件应用、HarmonyOS多模输入,以及服务卡片的开发。 路径 恭喜大家已经渐入佳境,朝技术大牛勇敢地迈出了第一步。在这个阶段,我们将主要学习HarmonyOS的界面开发的系列知识: •Ability及其生命周期 − Page Ability,用于提供与用户交互的能力 − Service Ability,用于提供后台运行任务的能力 − Data Ability,用于对外部提供统一的数据访问抽象 − Intent,对象之间传递信息的载体 •公共事件与通知 − 系统公共事件 − 自定义公共事件 − 消息通知机制 •HarmonyOS Java UI组件应用 − 常用组件的使用,包括Button、Text、Image、ToastDialog、WebView等 − 常用布局,包括DirectionalLayout、DependentLayout、PositionLayout等 − 自定义组件和自定义布局 − 基本的动画开发指导,如帧动画、数值动画、属性动画 − 可见可说相关开发 •HarmonyOS JS UI组件应用 − HML(HarmonyOS Markup Language)、CSS、JavaScript − JS的基本组件,包括基础组件、容器组件、媒体组件、画布组件等 − JS的基本布局,学会如何添加容器 − 如何添加交互、动画、事件、页面路由焦点逻辑等 − JS FA(Feature Ability)调用Java PA(Particle Ability)的机制 •HarmonyOS多模输入 − HarmonyOS多模输入融合框架(传统按键、触屏等输入方式,新型语音等输入方式) •服务卡片开发 − 服务卡片的开发,包括Java卡片和JS卡片 Tips 请大家多思考HarmonyOS背后的运行逻辑,如果还有一些疑惑,可前往HarmonyOS官方论坛发帖求助。 推荐参考下面的资料,可帮助你快速完成本阶段的学习: − Java UI框架常用组件和布局开发体验:帮助开发者了解HarmonyOS Java UI框架常见的组件和布局 − 基于JS通用组件的购物应用:使用JS开发一款简单的HarmonyOS购物应用 − 如何实现自定义组件:通过一个圆形抽奖转盘讲解如何实现HarmonyOS自定义组件 − IDE模板:IDE中已经集成了丰富的模板,均已标出使用何种语言进行编码,是你学习的宝库 本阶段学习完后,可以实现一些简单应用、实用卡片。 Step3游刃有余(6-8周,每周8-10小时) 目标 在这个阶段,大家需要掌握HarmonyOS的新能力、新特性,包括分布式、AI、数据管理、设备管理等知识。 路径 恭喜大家,距离HarmonyOS技术大牛又近了一步! 通过前面两个阶段的学习,你们已经具备了基础的HarmonyOS应用开发的能力,可轻松实现一些简单应用、实用卡片的开发。 在本阶段,我们将开启新的学习篇章,进一步提升大家的HarmonyOS应用开发能力,开发更加酷炫,功能更加强大的应用。大家需要学习: •分布式技术 − 分布式软总线:是分布式设备的通信基座,为设备提供了统一的分布式通信能力 − 分布式设备虚拟化:可以让多种设备共同形成一个超级虚拟终端 − 分布式任务调度:通过调用指定能力的分布式接口,实现跨设备能力调度 − 分布式数据服务:为应用程序提供不同设备间数据库数据分布式的能力 − 分布式文件服务:提供多设备之间的文件共享能力,能够在多个设备之间无缝获取文件 •数据管理 − 关系型数据库:提供给用户无需编写原生SQL语句就能进行数据增删改查的方法 − 对象关系映射数据库:通过将实例对象映射到关系上,实现使用操作实例对象的语法,来操作关系型数据库 − 轻量级偏好数据库:主要用于保存应用的一些常用配置,并不适合存储大量数据和频繁改变数据的场景 − 融合搜索:提供搜索引擎级的全文搜索能力,可支持应用内搜索和系统全局搜索 − 数据存储管理:提供存储设备(包含本地存储、SD卡、U盘等)的数据存储管理能力的开发 •AI − 二维码生成:调用方可以通过二维码字节流生成二维码图片 − 通用文字识别:利用文字识别技术将图像信息转化为计算机等设备可以使用的字符信息的技术 − 图像超分辨率:提供适用于移动终端的1x和3x超分能力 − 文档检测校正:提供了文档翻拍过程的辅助增强功能,包含两个子功能:文档检测和文档校正 − 文字图像超分:文字图像超分辨率可以对包含文字内容的图像进行9倍放大(高宽各放大3倍) − 分词:对于一段输入文本,可以自动进行分词,同时提供不同的分词粒度 − 词性标注:对于输入的一段文本,自动通过词性标注接口对其进行分词,并为分词结果中的每个单词标注一个正确的词性 − 助手类意图识别:对用户发送给设备的文本消息进行语义分析和意图识别 − IM类意图识别:利用机器学习技术,针对用户短信或聊天类APP等IM应用的文本消息进行内容分析,并识别出消息内容代表的用户意图 − 关键字提取:可以在大量信息中提取出文本想要表达的核心内容 − 实体识别:从自然语言中提取出具有特定意义的实体,并在此基础上完成搜索等一系列相关操作及功能 − 语音识别:将语音文件、实时语音数据流转换为汉字序列,准确率达到90%以上(本地识别95%) − 语音播报:将文本转换为语音并进行播报 •媒体 − 视频:视频编解码开发、视频播放、录制、提取等 − 图像:图像的编解码开发、位图操作等 − 相机:相机模块的开发和相关API的调用等 − 音频:音频的播放、采集、音量管理等 − 媒体会话管理:对媒体服务和界面进行解耦,使应用可以自由、高效地在不同的媒体之间完成切换 − 媒体数据管理:支持多媒体数据管理相关的功能开发,如:获取媒体元数据、截取帧数据等 •安全 −权限:定义了不同开放范围与授权方式的权限来保护数据 − 生物特征识别:当前生物特征识别支持2D人脸识别、3D人脸识别,可应用于设备解锁、应用登录、支付等身份认证场景 •网络与连接 − NFC:NFC消息通知是HarmonyOS内部或者与应用之间跨进程通讯的机制 − 蓝牙:蓝牙是短距离无线通信的一种方式,HarmonyOS蓝牙主要分为传统蓝牙和低功耗蓝牙 − WLAN:为用户提供WLAN基础功能、P2P(peer-to-peer)功能和WLAN消息通知的相应服务 − 网络管理:应用可以调用API接口来使用指定网络进行数据传输 − 电话服务:电话服务系统提供了一系列的API用于获取无线蜂窝网络和SIM卡相关的一些信息 •设备管理 − 传感器:开发者根据传感器提供的Sensor API,可以查询设备上的传感器,订阅传感器的数据 − 控制类小器件:控制类小器件指的是设备上的LED灯和振动器 − 位置:位置能力用于确定用户设备在哪里,系统使用位置坐标标示设备的位置 − 设置:应用程序可以根据自身拥有的权限对其进行操作 − 设备标识符:包括NetworkID、DVID、UUID Tips 这个阶段难度指数升高,请合理调整你的心境。“修炼”成功后,你对HarmonyOS 的掌握将会上升到一个新的台阶。 推荐学习资料: •Sample案例库:针对HarmonyOS的新能力、新特性,我们为你准备了丰富的Sample案例库,案例包含分布式、多线程、常用组件、相机等特性,第一期共47个案例,即将全部开源(收藏本文,代码链接随后更新) •Codelabs开发者教程:结合智慧生活的七大典型场景,我们为你准备好了大量的进阶学习资料,目前已经上线了20+个教程案例,你可以参考如下文档进行学习。 -分布式技术是你需要重点学习的核心知识点,包括分布式任务调度(基于分布式的亲子早教系统)、分布式数据服务(如何使用分布式数据库)、分布式文件服务(HarmonyOS分布式语音照相机); -数据管理部分,可以参考如何使用轻量级偏好数据库、基于Data Ability的关系型数据库操作方法进行学习; - HarmonyOS为你提供了开箱即用的AI能力,可以参考基于AI能力的通用文字识别、基于AI能力的语音播报系统进行学习; -媒体部分可以参考基于图像模块实现图库图片的四种常见操作、实现一个简易播放器进行图像和视频播放器的学习; -安全可以参考如何使用HarmonyOS面部识别能力进行学习; -设备管理可以参考如何使用BLE实现设备间通信进行学习; 学完本阶段后,大家能开发出以下的案例效果: ▲智慧出行:导航信息在手机、手表、车机之间来回流转 ▲智能家居:手机可以控制台灯亮度 ▲手机手表背单词:手表显示单词列表,手机显示单词详情 ▲分布式照相机:右侧手机拍摄的照片可以立马流转到左侧手机上 ▲益智拼图游戏:左右两台手机可以协同拼图 Step4独孤求败(8-10周,每周10-12小时) 目标 本阶段学习是迈向“大神”的进阶之路,需要着重学习HarmonyOS的底层原理,包括大量驱动和框架代码。 路径 成为技术大牛已近在咫尺了!完成本阶段的学习,你的HarmonyOS应用开发能力将超越95%以上的开发者。 HarmonyOS整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。 系统功能按照“系统 > 子系统 > 功能/模块”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或功能/模块。 在本阶段,你需要阅读OpenHarmony开源项目的相关代码,还需要有C/C++的相关背景知识,请重点掌握以下内容: •C/C++编程语言 − 基本语法,包括数据类型、变量、指针、字符串、数组、结构体、动态库等 − 面向对象的编程思想,包括类和对象,类的继承和派生、多态等 − 其他语言特性,包括函数模板、类模板,异常、I/O流、STL等 •内核层 − 内核子系统:HarmonyOS采用多内核设计,支持针对不同资源受限设备选用适合的OS内核。内核抽象层(KAL,Kernel Abstract Layer)通过屏蔽多内核差异,对上层提供基础的内核能力,包括进程/线程管理、内存管理、文件系统、网络管理和外设管理等 − 驱动子系统:硬件驱动框架(HDF)是HarmonyOS硬件生态开放的基础,提供统一外设访问能力和驱动开发、管理框架 • 系统服务层 系统服务层是HarmonyOS的核心能力集合,通过框架层对应用程序提供服务。该层包含以下几个部分: − 系统基本能力子系统集:为分布式应用在HarmonyOS多设备上的运行、调度、迁移等操作提供了基础能力,由分布式软总线、分布式数据管理、分布式任务调度、方舟多语言运行时、公共基础库、多模输入、图形、安全、AI等子系统组成 − 基础软件服务子系统集:为HarmonyOS提供公共的、通用的软件服务,由事件通知、电话、多媒体、DFX(Design For X) 、MSDP&DV等子系统组成 − 增强软件服务子系统集:为HarmonyOS提供针对不同设备的、差异化的能力增强型软件服务,由智慧屏专有业务、穿戴专有业务、IoT专有业务等子系统组成 − 硬件服务子系统集:为HarmonyOS提供硬件服务,由位置服务、生物特征识别、穿戴专有硬件服务、IoT专有硬件服务等子系统组成 根据不同设备形态的部署环境,基础软件服务子系统集、增强软件服务子系统集、硬件服务子系统集内部可以按子系统粒度裁剪,每个子系统内部又可以按功能粒度裁剪。 •框架层 −HarmonyOS应用开发提供了Java/C/C++/JS等多语言的用户程序框架和Ability框架 −两种UI框架(包括适用于Java语言的Java UI框架、适用于JS语言的JS UI框架) −各种软硬件服务对外开放的多语言框架API − 根据系统的组件化裁剪程度,HarmonyOS设备支持的API也会有所不同 •应用层 −应用层包括系统应用和第三方非系统应用 −HarmonyOS的应用由一个或多个FA(Feature Ability)或PA(Particle Ability)组成 Tips 此阶段适合有丰富应用开发经验的开发者进行学习,你可以接触到大量的系统底层源码,这些代码都将陆续开源,请持续关注。学完之后,大家就可以试着做一些子系统的开发了。 •学习举例:分布式软总线子系统 − 能力了解:阅读分布式软总线子系统.md,了解该子系统的关键能力 −阅读代码:分布式软总线子系统的相关代码都将开源到“/foundation/communication”目录下,你可以下载相关代码进行阅读 −提交代码:如果你在代码阅读过程中有一些自己的优化改进,可以参与贡献,具体可以了解如何贡献链接 − 参与社区:大神还可以参与OpenHarmony社区治理、开发者贡献指南、开发者贡献协议、社区交流等内容,具体可以了解社区介绍链接 建议大家在跟着学习路径走的同时,一定要配合看我们专门收集的资料(包含大量工具、教程、详解视频等),能大大提高你的学习效率,快人一步实现技术晋级。赶快下载资料先学习起来吧~ 欢迎大家把这篇学习路线分享给身边的朋友,一起加入HarmonyOS生态大家庭。 400M 学习资料下载:https://developer.huawei.com/consumer/cn/activity/201622461188515978

优秀的个人博客,低调大师

中科视拓CTO山世光:如何用X数据驱动AI成长? | CCF-GAIR 2017

雷锋网AI科技评论按:7月7日,全球人工智能和机器人峰会(CCF-GAIR 2017)在深圳如期举办,由CCF中国计算机学会主办、雷锋网(公众号:雷锋网)与香港中文大学(深圳)承办的这次大会共聚集了来自全球30多位AI领域科学家、近300家AI明星企业。雷锋网最近将会陆续放出峰会上的精华内容,回馈给长期以来支持雷锋网的读者们! 本次带来中科视拓CTO,中科院计算所研究员山世光博士在GAIR 2017大会上的分享精华。 山世光,中科院计算所研究员、博导,基金委优青,CCF青年科学奖获得者,现任中科院智能信息处理重点实验室常务副主任,中科视拓创始人、董事长兼CTO。他的研究领域为计算机视觉和机器学习。已在国内外刊物和学术会议上发表论文200余篇,其中CCF A类论文60余篇,论文被谷歌学术引用10000余次。曾应邀担任过ICCV,AC

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册