架构的三个维度和六个层面
转自:
https://cloud.tencent.com/info/e9695bd18d1c7752b3924bb3ac38cc95.html
https://mp.weixin.qq.com/s/81DIj_ErsPTCcUJD0nPKAA
三个维度IT架构IT架构其实就是计算,网络,存储。这是云架构师的基本功,也是最传统的云架构师应该首先掌握的部分。
良好设计的IT架构,可以降低CAPEX和OPEX,减轻运维的负担。数据中心,虚拟化,云平台,容器平台都属于IT架构的范畴。
应用架构随着应用从传统应用向互联网应用转型,仅仅搞定资源层面的弹性还不够,常常会出现创建了大批机器,仍然撑不住高并发流量。因而基于微服务的互联网架构,越来越成为云架构师所必需的技能。
良好设计的应用架构,可以实现快速迭代和高并发。数据库,缓存,消息队列等PaaS,以及基于SpringCloud和Dubbo的微服务框架,都属于应用架构的范畴。
数据架构数据成为人工智能时代的核心资产,在做互联网化转型的同时,往往进行的也是数字化转型,并有战略的进行数据收集,这就需要云架构师同时有大数据思维。
有意识的建设统一的数据平台,并给予数据进行数字化运营。搜索引擎,Hadoop,Spark,人工智能都属于数据架构的范畴。
六个层面基础设施层
在数据中心里面,会有大量的机架,大量的服务器,并通过交换机和路由器将服务器连接起来,有的应用例如Oracle是需要部署在物理机上的。
为了管理的方便,在物理机之上会部署虚拟化,例如Vmware,可以将对于物理机复杂的运维简化为虚拟机灵活的运维。
虚拟化采取的运维方式多是由运维部门统一管理,当一个公司里面部门非常多的时候,往往要引入良好的租户管理。
随着应用架构越来越重要,对于标准化交付和弹性伸缩的需求越来越大,容器做为软件交付的集装箱,可以实现基于镜像的跨环境迁移,Kubernetes是容器管理平台的事实标准。
数据层数据层,如果是传统应用,可能会使用Oracle,并使用大量的存储过程,有大量的表联合查询,成本也往往比较高。
但是对于高并发的互联网应用,需要进行微服务的拆分,数据库实例会比较多,使用开源的MySQL是常见的选择。
大量的存储过程和联合查询往往会使得微服务无法拆分,性能会比较差,因而需要放到应用层去做复杂的业务逻辑,而且数据库表和索引的设计非常重要。
当并发量比较大的时候,需要实现横向扩展,就需要基于分布式数据库,也是需要基于单库良好的表和索引设计。
对于结构比较灵活的数据,可以使用MongoDB数据库,横向扩展能力比较好。
对于大量的联合查询需求,可以使用ElasticSearch之类的搜索引擎来做,速度快,更加灵活。
中间件层数据库层往往需要保证数据的不丢失以及一些事务,因而并发性能不可能非常大。
所以我们经常说,数据库是中军大营,不能所有的请求都到这里来,因而需要一层缓存层,用来拦截大部分的热点请求。
Memcached适合做简单的key-value存储,内存使用率比较高,而且由于是多核处理,对于比较大的数据,性能较好。
但是缺点也比较明显,Memcached严格来讲没有集群机制,横向扩展完全靠客户端来实现。
另外Memcached无法持久化,一旦挂了数据就都丢失了,如果想实现高可用,也是需要客户端进行双写才可以。
Redis的数据结构比较丰富,提供持久化的功能,提供成熟的主备同步,故障切换的功能,从而保证了高可用性。
另外微服务拆分以后,有时候处理一个订单要经过非常多的服务,处理过程会比较慢,这个时候需要使用消息队列,让服务之间的调用变成对于消息的订阅,实现异步处理。
RabbitMQ和Kafka是常用的消息队列,当事件比较重要的时候,会结合数据库实现可靠消息队列。
基础服务层有的时候称做中台层,将通用的能力抽象为服务对外提供原子化接口。
这样上层可以根据业务需求,通过灵活的组合这些原子化接口,灵活的应对业务需求的变化,实现能力的复用,以及数据的统一管理,例如用户数据,支付数据,不会分散到各个应用中。
另外基础服务层称为应用、数据库和缓存的一个分界线,不应该所有的应用都直接连数据库,一旦出现分库分表,数据库迁移,缓存选型改变等,影响面会非常大,几乎无法执行。
如果将这些底层的变更拦截在基础服务层,上层仅仅使用基础服务层的接口,这样底层的变化会对上层透明,可以逐步演进。
业务服务层或者组合服务层大部分的业务逻辑都是在这个层面实现,业务逻辑比较面向用户,因而会经常改变,所以需要组合基础服务的接口进行实现。
在这一层,会经常进行服务的拆分,实现开发独立,上线独立,扩容独立,容灾降级独立。
微服务的拆分不应该是一个运动,而应该是一个遇到耦合痛点的时候,不断解决,不断演进的一个过程。
微服务拆分之后,有时候需要通过分布式事务,保证多个操作的原子性,也是在组合服务层来实现的。
用户接口层用户接口层,也即对终端客户呈现出来的界面和App,但是却不仅仅是界面这么简单。
这一层有时候称为接入层。在这一层,动态资源和静态资源应该分离,静态资源应该在接入层做缓存,使用CDN进行缓存。
也应该UI和API分离,界面应该通过组合API进行数据拼装。API会通过统一的API网关进行统一的管理和治理。
一方面后端组合服务层的拆分对APP是透明的;另一方面当并发量比较大的时候,可以在这一层实现限流和降级。
支撑层为了支撑这六个层次,在上图的左侧是一些公共能力:
持续集成和持续发布是保证微服务拆分过程中的快速迭代,以及变更后保证功能不变的,不引入新的Bug。
服务发现和服务治理是微服务之间互相的调用,以及调用过程中出现异常情况下的熔断,限流,降级策略。
大数据和人工智能是通过收集各个层面的数据,例如用户访问数据,用户下单数据,客服询问数据等,结合统一的中台,对数据进行分析,实现智能推荐。
监控与APM是基础设施的监控和应用的监控,发现资源层面的问题以及应用调用的问题。
人工智能
文章目录概念常用的基本语义关系事物与概念的表示语义网络表示一元关系较复杂关系的表示方法情况和动作的表示语义网络的基本推理过程继承匹配概念语义网络:语义网络是一种用实体及其语义关系来表达知识的有向图。节点:表示实体,表示各种事物、概念、情况、属性、状态、事件、动作等。弧:代表语义关系,表示它所连接的两个实体之间的语义联系在语义网络表示中,每一个节点和弧都必须有标志,用来说明它所代表的实体或语义。
语义基元:在语义网络表示中最基本的语义单元基本网元:一个语义基元所对应的那部分网络结构语义基元可用如(节点1,弧,节点2)这样一个三元组来描述。它的结构可以用一个基本网元来表示。
例如,若用A、B分别表示三元组中的节点1、节点2,用R表示A与B之间的语义联系,那么它所对应的基本网元的结构如下所示。
医疗人工智能系统的三个关键要素和挑战
医疗人工智能系统的建立和应用中需要处理好如下三个关键要素,克服处理三个要素中面临的挑战,才能取得成功。三个要素如下:数据、平台计算能力、深度学习算法模型。
1.数据
医疗人工智能系统需要医疗大数据作为基础,通过机器学习等技术形成一定的智能,用来提供辅助诊断和辅助治疗的功能。
医疗大数据主要包括医学教科书、病历尤其是针对某类疾病的病历、数字化医疗影像、学术论文等。
对于医学影像人工智能系统来说,则是需要数字化影像数据,包括CT、MRI、超声、病理等影像数据,作为机器学习的原料。
因为病历数据、数字化医疗影像数据等属于医院的知识财产,所以人工智能系统的知识产权归属原则和管理方法,需要在实践中不断探索。
医疗数据种类繁多,来源广泛,数据格式千差万别。所以,快速处理数据的收集、集成和加工用以保障人工智能模型的训练和学习,这是开发人工智能系统需要克服的基本挑战。
目前影像人工智能辅助诊断系统在医院落地使用的时候,通常需要利用该医院的影像数据重新学习,以及需要挑战模型参数,才能适应医院的需求。
这是因为在影像数据这一关键因素中,目前各家医院之间因为在影像生成中采用的标准不一致。
例如关于显影剂的服用量标准、设备参数设置不一致造成影像灰度的差别等,造成各个医院之间针对同一个患者的影像数据不同,用来支持机器学习的时候,其模型参数也会不同。
为了能够加大人工智能系统的适用性,需要在开发人工智能系统的时候能够快速集成多方来源的数据,从而训练出更加精准、适用性更广的人工智能系统。
2.深度学习算法模型
除了处理数据之外,选用或开发深度学习的模型算法也是发展过程中的一大挑战。
目前深度学习的算法很多,但是这些算法很难直接应用,而是需要做一定的改进开发,然后应用到数据训练中,并在训练中不断的改进和完善,才能使算法模型越来越精确。
所以,选择合适的算法或者开发算法、以及建立算法调整和改进的平台系统,这是人工智能系统成功的要素之一。
因为AI系统处于起步阶段,所以目前医院用应用的人工智能系统其模型算法与实际的需求仍然有不完全相符合的问题,需要不断的改进。算法模型的改进也是不断把AI系统推向更加精确的一项重要工作。如下图所示,根据调查,目前医院中使用的AI系统都需要不同程度的改进或升级算法。
3.人工智能平台的计算能力
构建一个算力强大的计算平台是人工智能开发成功的根本要素之一。因为深度学习中需要非常巨大数量的数据输入给训练模型,训练模型则需要进行巨大规模的运算来训练模型使其具有智能,所以人工智能平台的计算能力(算力)是其成功的一个关键要素。
目前,人工智能计算平台主要使用GPU芯片,医学影像人工智能系统更是依赖于GPU来进行训练和学习。也有一些AI系统使用CPU、FPGA、高性能处理器(TPU)等芯片。
目前各大服务器厂商也都开发了用于机器学习和运行人工智能系统的服务器,例如戴尔、新华三、联想、浪潮等服务器厂商。NVIDIA也开发了用于人工智能系统的开发和运行的超级计算机DGX。
人工智能平台的计算系统目前大多使用开源系统,在开源系统上做出定制化开发以满足自己产品的需要。
目前使用的主流开源系统有TensorFlow,分布式机器学习工具包(DMTK),Caffe等。
在开源平台上进行定制化开发,需要非常强大的开发能力,对于开发团队的技术水平要求非常高,因为开发水平决定着计算平台的计算能力和计算效率,决定着人工智能系统的精准性。
NVIDIA推出的专业计算平台Clara,很好地打包集成了NVIDIAGPU的计算能力,并集成了多种机器学习模型,能够为深度学习和人工系统运行提供专业的支持,也能为处理影像数据并进行机器学习提供专业工具。 责任编辑:zl