架构设计

VM架构设计文档初稿v0.01

老子叫甜甜 提交于 2020-02-27 02:15:46
VM架构设计文档初稿v0.01 文档介绍 本文档是经过讨论,作为VM新架构设计开发中的重要依据。对该架构的整个系统的结构进行详实细致的描述。阐述框架结构,说明该架构所采取的设计策略和所有技术,并对相关内容作出统一的约定。为设计,编码,测试提供可以参考的模板和帮助。提高设计变更开发的效率,将头脑风暴的结果进行的具体的书面呈现。 架构设计思想 该架构VM以微服务思想为核心进行衍化,兼容DevOps作为主要基础,并使用DDD领域驱动设计思想作为设计过程中的指导思想及方法论。 架构体系描述 以分层体系作为系统架构风格的顶层设计,秉承高内聚,低耦合思想引入分布式思想,消息队列等等作为架构解耦,扩展的基本要素,以DDD思想和业务逻辑作为微服务拆分的主要原则 系统设计分为 显视层 通信控制层 业务逻辑层 持久化层 系统关键模块及组件 根据各层以及各链路整体出发 系统关键模块及组件 共有 负载均衡 , RTM (Request To Message),MQ,Frame 微服务模块,数据存储等 首先 所有用户请求先行经过 负载均衡服务 到 多节点 分布式 的 RTM (Request To Message) 进行消息转发和 依赖 Zookeeper的非法请求识别,服务监测,降级, 接下来 请求消息被转换为约定JSON格式进入到 RabbitMQ相应的消息队列,消息队列主要承载 解耦 削峰 限流

Spark学习四:Spark架构设计和RDD的stage划分

不羁的心 提交于 2020-02-26 00:32:29
文章目录 架构设计 Spark运行基本流程 RDD之间的依赖关系 stage的划分 RDD运行过程 参考网址 架构设计 学习完 Spark学习二:spark基础理论知识 ,我们可以对Spark的一些组件和术语应该有了基本的认识,下面介绍Spark的架构设计。本节内容主要参考 厦门大学林子雨老师的Spark课程 。非常感谢林子雨老师! 如下图所示。 Spark运行架构包括集群资源管理器( Cluster Manager )、运行作业任务的工作节点( Worker Node )、每个应用的任务控制节点( driver program )和每个工作节点上负责具体任务的执行进程( Executor )。其中,集群资源管理器可以是Spark自带的资源管理器,也可以是YARN或Mesos等资源管理框架。 与Hadoop MapReduce计算框架相比,Spark所采用的Executor有两个优点: 一是利用多线程来执行具体的任务(Hadoop MapReduce采用的是进程模型) (Spark和MapReduce的运行模式在 Spark学习二:spark基础理论知识 里也详细说明过),减少任务的启动开销; 二是Executor中有一个BlockManager存储模块 ,会将内存和磁盘共同作为存储设备,当需要多轮迭代计算时,可以将中间结果存储到这个存储模块里,下次需要时

高可用架构设计

£可爱£侵袭症+ 提交于 2020-02-25 19:55:32
设计高可用的软件架构,是每个互联网软件开发工程师的追求。尤其对于在线交易系统、在线广告系统而言,服务的可用性会直接影响商业变现。随着互联网技术在工业界的广泛使用,各大互联网公司在各自的业务领域内,沉淀了成熟的高可用架构方案。那么究竟什么是高可用?高可用架构该如何设计呢? 度量 首先需要了解下什么是可用性以及如何度量可用性。对于一个交互式IT产品,是否可用是看用户能否用该产品完成他的任务。可用性就是在某个考察时间内,系统能够正常运行的概率或时间占有率的期望值。对于可用性等级,业内一般用n个9来描述,如下所示。 服务处于不可用状态的时间称为 故障时间 。可用性每提高一个等级,故障时间就要降一个数量级。从天到时到分,相对来说比较容易实现。再往后每提高一个等级,将付出成百上千倍的努力。大型网站服务通常至少做个4个9,做到5个9及以上就比较困难了。不仅要解决技术挑战,还要面对极大的成本压力。对于网站核心服务,会尽可能做到5个9,而非核心服务4个9,甚至3个9也可以接受。做技术决策时必须考虑 经济账 。 方法 那如何做到高可用呢?方法很简单: 冗余 。通俗讲,就是双保险机制。背后的理论基础是概率论。假设某个服务的可用性是99%(故障率1%),那么两个服务的可用性就是1-0.01*0.01=99.99%。可以看到,冗余对可用性的提升是 指数级 的。再冗余一个服务,可用性就达到6个9了。哇

一个电子商务系统的架构设计,请大家一起来挑挑毛病

孤街浪徒 提交于 2020-02-23 22:24:43
以下是一个电子商务系统的架构设计,第一次做这样的设计,请大家一起来挑挑毛病,任何您能够想到的,都请你提出来,万分感谢! 需求是:需要支持注册用户数从10万到1000万平滑扩展,并且保证一定的性能、安全性和可用性。 系统架构示意图 1、 可管理性 l 采用中央配置服务器保存全局所有子系统、负载均衡等配置信息,并将其提供给各子系统; l 每台服务器上运行一个监控进程,用于定时报告服务器运行状态。 2、 可伸缩性 l 使用 DNS 负载均衡实现 Web 服务器的可伸缩性; l 使用业务分解,以及可配置的负载均衡策略实现业务层的可伸缩性; l 使用数据分解,以及数据库集群实现数据层的可伸缩性; l 使用其他分解方法实现其他子系统的可伸缩性。 l 将面向 Customer 的网站分为 Web 部分和 Resource 部分,目的是根据内容(页面逻辑和图片资源)对带宽、缓存、服务器性能等进行优化; 3、 安全性 l 最外层( Web )设置防火墙以抵御各种攻击; l 各子系统的相互访问实行严格的 IP 地址限制并且必须持有合法的 KEY ; l 访问中央配置服务器时,对传输的数据进行加密; l 尽可能对敏感数据(帐号和密码等)进行加密传输和存储; l 中间业务层负责所有业务逻辑的实现,并封装数据库访问,所有其他子系统均不直接访问数据库; l 在网络、硬件和操作系统上实施其他的安全策略。 4、

Hive系列之Hive架构设计原理

只谈情不闲聊 提交于 2020-02-12 22:52:44
文章目录 一.Hive基本使用 二. Hive架构设计 三. Hive运行流程详解 一.Hive基本使用 切换到可以操作hive的用户 直接输入hive回车,进入hive cli 常用命令使用 查看所有数据库:show databases; 创建数据库tianliangedu,即为create database tianliangedu 选择数据库 设置显示当前所在数据库名称 set hive.cli.print.current.db=true; 查看某个数据库中所有表:show tables; 创建一个表 向表中插入数据: insert into 查询数据表中的数据: select * from 表名称、 删除一个表:drop table 表名称 § 注意: values_tmp_table_*是对当前会话的数据缓存,暂忽略即可。 exit命令退出当前hive会话session,再进入则不会再出现。 使用总结 使用简单 面向数据和业务编程 二. Hive架构设计 三. Hive运行流程详解 来源: CSDN 作者: SkyingData 链接: https://blog.csdn.net/SkyingData/article/details/104286657

优秀架构师必须掌握的架构思维

﹥>﹥吖頭↗ 提交于 2020-02-07 08:19:16
如果说架构的本质是管理复杂性,那么抽象、分层、分治和演化思维是我们工程师/架构师应对和管理复杂性的四种最基本武器。 1、抽象思维 抽象其实是这样定义的: 对某种事物进行简化表示或描述的过程,抽象让我们关注要素,隐藏额外细节。 在系统架构和设计中,抽象帮助我们从大处着眼(get our mind about big picture),隐藏细节(temporarily hide details)。抽象能力的强弱,直接决定我们所能解决问题的复杂性和规模大小。 软件系统架构设计和小朋友搭积木无本质差异,只是解决的问题域和规模不同罢了。架构师先要在大脑中形成抽象概念,然后是子模块分解,然后是依次实现子模块,最后将子模块拼装组合起来,形成最后系统。所以我常说编程和架构设计就是搭积木,优秀的架构师受职业习惯影响,眼睛里看到的世界都是模块化拼装组合式的。 2、分层思维 除了抽象,分层也是我们应对和管理复杂性的基本思维武器,如下图,为了构建一套复杂系统,我们把整个系统划分成若干个层次,每一层专注解决某个领域的问题,并向上提供服务。有些层次是纵向的,它贯穿所有其它层次,称为共享层。分层也可以认为是抽象的一种方式,将系统抽象分解成若干层次化的模块。 3、分治思维 分而治之(divide and combine或者split and merge)也是应对和管理复杂性的一般性方法,下图展示一个分治的思维流程

软件架构师的架构流程

大兔子大兔子 提交于 2020-02-07 08:17:09
软件架构师的架构流程 架构的定义:一个程序和计算系统是指系统的一个或多个结构。结构中包括软件的构建,构建的外部可见属性以及它们之间的相互关系。 软件架构师能够通过软件架构分析设计在满足规定需求方面的有效性、在设计变更相对容易的阶段,考虑体系结构可能的选择方案、降低与软件构造相关联的风险。 软件架构的优点:软件架构能够满足系统的品质、架构设计使受益人达成一致的目标、架构设计能够支持计划编制过程、架构对系统开发的指导性。架构设计为复用奠定了基础、架构设计能够降低维护费用、架构设计能够支持冲突分析。一个好的架构是高内聚、低耦合的,既可以作为一个完整的可交付模块,也可以“打碎”了重组; 一般的软件开发过程包括五个阶段:概念化阶段、架构设计阶段、并行发与测试阶段、验收与测试阶段。但这是项目经理、架构师、开发人员、测试人员等所有人公同遵守的过程,对于软件架构师的架构设计及开展非常依赖其上游活动,这些上游活动包括需求分析和领域建模。需求分析,在没有全面认识需求并权衡不同需求之间相互影响的情况下,设计出的架构很有可能有问题。领域建模,领域建模的目的是透过问题领域的重重现象,捕捉其背后最为稳固的领域概念及这些概念之间的关系。概念性架构的设计过程:确定对架构的关键的需求。对功能需求进行筛选,对非功能需求进行综合权衡,最终确定对软件架构起关键作用的需求子集。 概念性构架设计:分析关键用例的用例规约

软件架构设计的七大原则

时光毁灭记忆、已成空白 提交于 2020-02-06 06:54:05
软件架构设计有七大原则,分别是:   1.开闭原则   2.依赖倒置原则   3.单一职责原则   4.接口隔离原则   5.迪米特法则(最小知道原则)   6.里氏替换原则   7.合成/聚合复用原则 下面分别具体说明: 1.开闭原则 :对扩展开放,对修改关闭 说的是,再设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展. 换言之,应当可以在不必修改源代码的情况下改变这个模块的行为,在保持系统一定稳定性的基础上,对系统进行扩展。 例如:一般软件功能的升级就需要符合开闭原则,即不去修改原来的代码,而是去增加新功能。 2.依赖倒置原则 :实现尽量依赖抽象,不依赖具体实现。 该原则有以下三点说明 1、高层模块不应该依赖于底层模块,两者都应该依赖于抽象, 2、抽象不应该依赖于细节,即具体实现类。 3、细节应该依赖于抽象。 这样带来的好处,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和可维护性,并且可以降低修改程序所造成的的风险。 例如:我们在日常开发中拿到需求之后,一般都是面向接口编程,先设计出顶层,在细节的来设计代码的结构。(以抽象为基准比以细节为基准搭建起来的架构要稳定的多) 3.单一职责原则 :对于一个类而言,应该仅存在一个可以引起类变化的原因。 从概念来说可能不大好理解,简单的来讲,就是我们平时在编程的时候,会在一个类上添加各种各样的功能

岗位职责

社会主义新天地 提交于 2020-02-05 04:16:08
1.需求分析:负责软件产品或项目的技术需求的整理和分析。 2.架构设计:确定项目或产品的技术架构设计和整理技术路线。研究引入新的技术路线,方法和编程思想,负责制定软件技术路线的规则和技术平台的发展。 3.平台研发:负责软件技术开发平台的改进,升级维护和发展规划。 4.技术评审:对项目或产品总体设计,模块设计进行确定,审查和把关。 5.构件整理:整理公司积累的公用基础构件和业务构件,进行产品化改造及核心代码的编写。 6.技术指导:对部分的技术人员进行相关的技术培训,指导开发人员在整体结构下开展设计研发工作。 7.技术管理:协助运营商管理部门进行项目总体的筹备与规划。 来源: https://www.cnblogs.com/finehappy/archive/2010/05/29/1746818.html

服务端高并发分布式架构演进之路

末鹿安然 提交于 2020-02-04 18:23:50
1. 概述 本文以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。 特别说明:本文以淘宝为例仅仅是为了便于说明演进过程可能遇到的问题,并非是淘宝真正的技术演进路径 2. 基本概念 在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍: 分布式 系统中的多个模块在不同服务器上部署,即可称为分布式系统,如Tomcat和数据库分别部署在不同的服务器上,或两个相同功能的Tomcat分别部署在不同服务器上 高可用 系统中部分节点失效时,其他节点能够接替它继续提供服务,则可认为系统具有高可用性 集群 一个特定领域的软件部署在多台服务器上并作为一个整体提供一类服务,这个整体称为集群。如Zookeeper中的Master和Slave分别部署在多台服务器上,共同组成一个整体提供集中配置服务。在常见的集群中,客户端往往能够连接任意一个节点获得服务,并且当集群中一个节点掉线时,其他节点往往能够自动的接替它继续提供服务,这时候说明集群具有高可用性 负载均衡 请求发送到系统时,通过某些方式把请求均匀分发到多个节点上,使系统中每个节点能够均匀的处理请求负载,则可认为系统是负载均衡的 正向代理和反向代理 系统内部要访问外部网络时