架构

一文简述服务器架构的演变过程:集群—分布式—微服务

亡梦爱人 提交于 2020-03-12 01:51:45
一、单服务器架构 小猿公司创立初期准备搭建一个电商网站销售公司产品,因为公司创业初期用户量不大而且着急上线,在资金有限的情况下公司购买了一台服务器,将小猿团队开发的网站放到服务器上这便算是正式上线了。 二、服务器集群 项目上线没多久就暴露了很多问题: 单点问题(服务器宕机将导致整个系统不可用) 处理效率问题,单台服务器可以接收的请求量十分有限,用户量大的情况下响应速度大幅下降,甚至出现内存溢出。 遇到了以上问题就必须对服务架构进行调整了,通过商量小猿团队决定增加服务器数量,这样可以已解决单服务器请求压力过大的问题,同时就算有部分服务器宕机了对外也能正常提供服务。 集群 引入了几个新问题: 每个服务器的ip地址不一样,如何让用户知道到底要访问哪一个? session问题,之前用户登录信息,购物车信息等等都是存在服务器的内存中,服务器集群后如何保证每个服务器共享session数据。 三、负载均衡 现在需要解决的就是让每个服务器处理的请求数能竟可能的均衡一些,比如轮循机制。这就是 负载均衡 。 负载均衡器的主要工作就是接受用户请求,并且根据一定的算法将请求分发给不同的服务器,架构调整后形成了下图的模式 (集群带来session的处理问题一般可以采用redis或者其他缓存服务器进行处理,这里不展开讨论了) 四、分布式 随着小猿公司的业务越来越负载,团队的成员也越来越多

在敏捷开发中采用演进式架构设计

跟風遠走 提交于 2020-03-11 21:46:12
在敏捷开发过程中,我们还需要对系统架构进行设计吗?事实上,Martin Fowler在《Is Design Dead?》一文中已经给出了答案,那就是我们同样不能忽略对系统架构的设计。与计划性的设计(Planned Design)不同,我们需要演进式的设计(Evolutionary Design)。在敏捷开发的生命周期中,我们通过每一次迭代来丰富与更新我们的设计方案,以使其最大限度地符合客户对系统的需求。这里所指的需求,包括 功能性需求和非功能性需求。 在Agile Journal四月刊中,IBM's Methods Group的敏捷专家Scott W. Ambler详细地阐述了在敏捷语境中的架构设计方法,他提出了所谓“架构预测(Architectural Envisioning)”的方法,以应对敏捷开发中逐步演进的架构设计过程。 Scott指出,敏捷模型驱动开发(Agile Model Driven Development,AMDD)明确地包括了初始需求分析与架构建模,这个过程发生在敏捷项目开发的第0次迭代中。所谓第0次迭代,就相当于项目的热 身活动,是项目得以启动的基础。在此迭代期间,团队需要充分地理解项目的范围,甄别可行地技术策略。这个阶段所能够收集到的信息将有助于你对整个项目最初 的粗略估计,以制定合适的项目计划,从而获得启动项目的资金与足够的支持。 更多内容

微服务架构 vs. SOA架构

我与影子孤独终老i 提交于 2020-03-11 20:14:30
面向服务架构(SOA)已经存在有些年头了,这是一种用于设计软件的伟大原则。在SOA中,所有组件都是独立自主的,并能为其他组件提供服务。要替换掉系统中的某些部分而不对整个系统造成较大的影响本是个难题,然而只要维护好系统各模块之间的低耦合,该难题便能迎刃而解,这也是我们之前谈及微服务时所认可的。大体上,SOA与微服务架构是非常相像的。那么它们之间的区别到底是什么呢?微服务是细粒度的SOA组件。换句话说,某单个SOA组件可以被拆成多个微服务,而这些微服务通过分工协作,可以提供与原SOA组件相同级别的功能,如下图所。 微服务是细粒度的SOA组件,它们是关注点更窄的轻量级服务。微服务与SOA之间的另一个不同之处是服务互联和编写服务时所使用的技术。J2EE是一个遵守企业级标准的用于编写SOA架构的技术栈。Java命名与目录接口(JNDI)、企业级JavaBean(EJB)以及企业服务总线(ESB)都是SOA应用赖以构建和维护的生态土壤。即便ESB是标准,在2005年之后毕业的工程师却鲜有听说过ESB的,至于用过ESB的那就更少了。而当代的,例如Rubyon Rails这样的框架甚至不会去考虑如此复杂的软件部件。 而另一方面,微服务推崇执行的标准(例如HTTP)却是人们广泛了解并共同使用的。我们可以通过选择合适的语言或工具来构建某个组件(微服务),进而获得本章“技术多样性”小节所提到的关键好处

MYSQL 逻辑架构

我们两清 提交于 2020-03-11 17:48:56
MYSQL 逻辑架构 思维导图 前言 》 Mysql并非尽善尽美,但足够灵活,能适应高要求环境,如Web应用。 》 Mysql在众多平台上运行良好,支持多种数据类型,但不支持对象类型(Mongodb支持) 》 Mysql的存储引擎可以基于表建立,以满足对数据存储,性能,特征及其他特性的各种需要。 架构逻辑视图 每个虚线框为一层,总共三层。 第一层,服务层(为客户端服务):为请求做连接处理,授权认证,安全等。 第二层,核心层:查询解析,分析,优化,缓存,提供内建函数;存储过程,触发器,视图。 第三层,存储引擎层,不光做存储和提取数据,而且针对特殊数据引擎还要做事务处理。 连接管理与安全性(第一层 服务层) > 处理流程 Δ 每个连接的查询都在一个进程中的线程完成。 Δ 服务器负责缓存线程,所以服务层不需要为每个连接新建线程。 > 认证流程    优化与执行 > 在解析查询之前,服务器会“询问”是否进行了查询缓存(只能缓存SELECT语句和相应结果)。缓存过的直接返回结果,未缓存的就需要进行解析查询,优化,重新执行返回结果。 > 解析查询时会创建一个内部数据结构(树),然后对其进行各种优化。 > 优化:重写查询,决定查询的读表顺序,选择需使用的索引。 思维导图 前言 》 Mysql并非尽善尽美,但足够灵活,能适应高要求环境,如Web应用。 》 Mysql在众多平台上运行良好

杉岩:软件定义存储,医疗信息化变革的“幕后推手”

我的未来我决定 提交于 2020-03-11 15:38:53
近年来,医疗体制改革取得了巨大发展。但随着人口老龄化加剧,国内医疗资源总量不足、分布不均等问题日益凸显,亟需加快推进信息化建设,进一步完善综合医疗服务体系。未来几年,医疗行业还将处在发展变革阶段。本文即是对医疗信息化建设的趋势和挑战加以分析,并基于分布式架构探索医疗私有云、PACS影像存储解决方案,为医疗行业信息化转型实践提供更多思路。 1、医疗信息系统及信息化趋势 医疗信息系统作为医院必不可少的基础设施与技术环境,支撑着医院的日常管理运营。结合业务特点,可以将医院信息系统分为三类。 一是业务平台系统,一般包括医院信息系统(HIS)、临床信息系统(CIS)、放射信息管理系统(RIS)、实验室信息管理系统(LIS)、影像归档和通信系统(PACS)、电子病历(EMR)、客户管理系统(CRM)、医院运营管理系统(HRP)等,各子系统承担不同的业务模块,共同保障医院的正常运营。 二是运营管理系统(ERP),主要承载财务管理、人力资源管理等业务模块,还会和HIS等系统对接以整合资源。其中结构化数据约占70%,文档、图片等非结构化数据约30%。 三是区域医疗系统,这是医疗机构间数据共享、信息整合的基础和载体,承载包括医保互通、远程医疗等交互业务。 互联网时代,网上问诊等新渠道异军突起,业务系统也在发生变化。未来几年医疗行业仍将处在变革阶段,主要体现在:完善医疗服务体系,加强基层医疗建设

一个成功的程序员,自然要懂微服务,汇总微服务架构的15钟框架!

左心房为你撑大大i 提交于 2020-03-11 07:02:24
这几年来,微服务这个概念越来越火了,火到什么程度呢?2019年有一个统计说,两千家企业里,45%在使用微服务,16%在实验开发和测试微服务架构,24%在学习微服务准备转型,只有剩下的15%的企业没有使用微服务。 微服务到底有什么好呢?微服务在2013年才被提出,短短几年就有这么快速的发展。微服务架构能够实现由小型自主服务组成一个整体应用,各个组成部分之间是松耦合的,复杂性低,各个部分可以独立部署,修复bug或者引入新特性更容易,能够独立扩展,不同技术栈之间可以使用不同框架、不同版本库甚至不同的操作系统平台。 对于中大型架构系统来说,微服务更加便捷,微服务成为很多企业架构重构的方向,同时也对架构师提出更高的挑战。目前有很多常用于微服务构建的框架,对于构建微服务架构能够带来一些帮助。 Java语言相关微服务框架 1.Spring Boot Spring Boot的设计目的是简化新Spring应用初始搭建以及开发过程,2017年有64.4%的受访者决定使用Spring Boot,可以说是最受欢迎的微服务开发框架。利用Spring Boot开发的便捷度简化分布式系统基础设施的开发,比如像配置中心、注册、负载均衡等方面都可以做到一键启动和一键部署。 2.Spring Cloud Spring Cloud是一个系列框架的合计,基于HTTP(s)的RETS服务构建服务体系,Spring

千锋云计算毕业设计论文:高并发大型互联网站架构设计(四)

99封情书 提交于 2020-03-11 02:32:27
每年进入3-4月所有的高等院校开始了一年一度的毕业生答辩准备阶段,现如今毕业论文或者毕业设计也更加的贴近了互联发展的趋势,很多学校开始做最热话题云计算openstack架构的实现以及云计算环境搭建,先不说这个毕业设计的切入点是否正确,就说选择该题目后你如何下手?下面给大家分享千锋讲师给学员准备的高并发大型互联网站架构设计第四部分。 数据库 一个公司的数据相当于一个公司的经济命脉,如果数据丢失或者数据出现误差,那么将有可能使这个公司不复存在。所以保障数据库的高可用就显得尤为重要了。 保障数据库的高可用其根本在于避免单节点故障,刚开始时我们的网站数据库架构只有后端的MySQL集群服务器,随着数据量的增加,无关系的数据越来越多,为了应对更大的流量,减少开销,在MySQL集群前加入了Redis集群,再到后来,数据库的流量进一步增大,为了缓解数据库服务器的压力,在Redis集群前又加入了MQ,以确保数据库的高可用及快速访问。如图2-7所示: 图2-7 数据库架构图 MySQL MySQL是一个小型关系型数据库管理系统,目前MySQL被广泛地应用在中小型网站中。因为其具有体积小、速度快、总体拥有成本低,开放源代码等特点[15]。 MySQL高可用 在设计MySQL数据库的高可用的架构时,重点要满足以下几点要求: 1.保证数据库的可用性,如果发生意外情况,要能够快速响应。 2

Serverless 架构与事件规范

天大地大妈咪最大 提交于 2020-03-10 17:03:36
基础服务架构 本篇内容主要讨论的是 Serverless 架构与其事件规范的基础原则。 首先,我们先来了解下在 HTTP/Web 场景下我们的典型的WEB场景是怎样的: 这里,我们不难看出典型的Web场景其实是由三大块内容,客户端,服务器,数据库组成。客户端在服务器侧通过类型 apache,nginx 等代理服务器来请求数据,代理服务器又通过数据库来写入或拉取数据资料。这个很简单,也是我们最常用的 Web 场景。 这里面服务器中可能涉及路由规则,鉴权逻辑以及其他各类复杂的业务代码,同时,开发团队要付出很大的精力在这个服务器的运维上面,包括客户量突然增多时是否需要扩容服务器?服务器上的脚本,业务代码等是否还在健康运行?是否有黑客在不断地对服务器发起攻击? Serverless服务架构 那么接下来,我们来看下 Serverless 服务是如何请求数据的吧: Serverless 场景下,客户端需要通过 API 网关 Baas 来访问函数 FaaS 服务,然后在通过函数计算做数据库链接实现数据库的写入和拉取。 当客户端和数据库未发生变的前提下,服务器变化巨大,之前需要开发团队维护的路由模块以及鉴权模块都将接入服务商提供的 API 网关系统以及鉴权系统,开发团队无须再维护这两部分的业务代码,只需要持续维护相关规则即可。同时业务代码也被拆分成了函数粒度,不同函数表示不同的功能。

浅谈微服务架构

拟墨画扇 提交于 2020-03-10 13:52:04
微服务来源 单体应用 微服务是相对于单体应用的,在介绍微服务之前,先简单介绍一下单体应用:通常是由三个重要部分组成:客户端界面(由HTML、JavaScript组成)、数据库(由许多的表组件构成一个通用的、相互关联的数据管理系统)、服务端应用。服务端应用处理客户端的HTTP请求、执行逻辑、检索并更新数据库中的数据、然后将处理后的数据返回给客户端。 一个单体应用被构建成一个系统时,业务中所有请求都要在单一的进程中处理完成,当访问量很高情况下服务器压力是很大的。当然可以水平扩展,利用负载均衡将实例布署到多台服务器中。 单体架构的缺点 [ ] 开发效率低 [ ] 代码维护难 [ ] 部署不灵活 [ ] 稳定性不高 [ ] 扩展性不高 云时代 在此之前单体应用也是很成功的,但是随着云时代的到来,单体应用就显得有些不妥了,特别是应用程序发布到云端的时候,一个功能的变更,需要统一的编译和发布。这样的架构模式很难使得一个模块的变更不影响到其他模块,而且在扩展方面也只能进行整体的扩展,不能根据正在运行的部分进行扩展。 微服务架构风格 云时代单体应用的尴尬导致了微服务架构风格的出现:以服务构建应用。 一个系统由多个服务组成,各服务可以被独立布署、独立扩展,每个服务也都提供了清晰的模块边界,甚至不同的服务都可以使用不同的编程语言来实现,也可以由不同的团队进行管理。 微服务介绍

Java单体应用 - 架构模式 - 02.MVC架构

ⅰ亾dé卋堺 提交于 2020-03-10 11:36:17
原文地址: http://www.work100.net/training/monolithic-architecture-mvc.html 更多教程: 光束云 - 免费课程 MVC架构 序号 文内章节 视频 1 什么是MVC架构 - 2 MVC架构程序的工作流程 - 3 三层架构+MVC示意图 - 请参照如上 章节导航 进行阅读 1.什么是MVC架构 MVC,即 Model 模型、View 视图,及 Controller 控制器。 View :视图,为用户提供使用界面,与用户直接进行交互。 Model :模型,承载数据,并对用户提交请求进行计算的模块。其分为两类,一类称为数据承载 Bean,一类称为业务处理 Bean。所谓数据承载 Bean 是指实体类,专门用户承载业务数据的,如 Student 、 User 等。而业务处理 Bean 则是指 Service 或 Dao 对象, 专门用于处理用户提交请求的。 Controller :控制器,用于将用户请求转发给相应的 Model 进行处理,并根据 Model 的计算结果向用户提供相应响应。 2.MVC架构程序的工作流程 用户通过 View 页面向服务端提出请求,可以是表单请求、超链接请求、AJAX 请求等 服务端 Controller 控制器接收到请求后对请求进行解析,找到相应的 Model 对用户请求进行处理 Model 处理后