架构

大型网站技术架构(1)

允我心安 提交于 2019-12-03 19:06:04
网站都是从小网站一步一步发展为大型网站的,而这之中的挑战主要来自于庞大的用户、安全环境恶劣、高并发的访问和海量的数据,任何简单的业务处理,一旦需要处理数以 P 计的数据和面对数以亿计的用户时,问题就会变的很棘手 下面我们就来说说这个演变过程: 初始阶段 大型网站都是由小型网站演变而来的,网站架构也一样 小型网站最开始没有太多人访问,只需要一台服务器就绰绰有余,就像这样: 应用程序、数据库、文件等所有资源都在一台服务器上,通常使用 Linux PHP MySQL Apache 就可以完成整个项目部署,然后再买个域名,租一个廉价的服务器就可以开始我们的网站之旅了 应用服务与数据服务分离 随着业务的发展,逐渐的一台服务器已经不能满足需求,这时我们可以将 应用与数据分离 分离之后我们使用到三台服务器:应用服务器、文件服务器和数据库服务器,如下所示: 对于这三台服务器要求各不相同: 应用服务器 要处理大量的业务逻辑,所以需要更好更快更强大的 CPU 数据库服务器 需要快速的进行磁盘检索和数据缓存,因此需要更快的硬盘和更大的内存 文件服务器 需要存储用户上传的文件资源,因此需要更大的硬盘存储空间 应用与数据分离后,各个的职责变得更加专一,网站的性能得到进一步的提升,但随着用户的继续增加,我们需要对网站架构进一步优化 使用缓存改善性能 网站的访问一样遵循二八定律:80% 的业务访问集中在 20%

dubbo+zookeeper网络架构

时光毁灭记忆、已成空白 提交于 2019-12-03 17:27:34
微服务的一般架构图: 架构图 使用dubbo+zookeeper实现简化的微服务架构 dubbo是一个分布式服务框架,是阿里巴巴SOA服务化治理方案的核心框架。zookeeper是一个开源的分布式协调服务,是由雅虎创建的,基于google chubby。 zookeeper能做什么 1.数据的发布/订阅(配置中心:disconf) 2.命名服务 3.master选举(kafka、hadoop、hbase) 4.分布式队列 5.分布式锁 zookeeper特性 1.顺序一致性 从同一个客户端发起的事务请求,最终会严格按照顺序被应用到zookeeper中 2.原子性 所有的事务请求的处理结果在整个集群中的所有机器上的应用情况是一致的,也就是说,要么整个集群中的所有机器都成功应用了某一事务、 要么全都不应用 3.可靠性 一旦服务器成功应用了某一个事务数据,并且对客户端做了响应,那么这个数据在整个集群中一定是同步并且保留下来的 4.实时性 一旦一个事务被成功应用,客户端就能够立即从服务器端读取到事务变更后的最新数据状态;(zookeeper仅仅保证在一定时间内,近实时) zookeeper可以作为dubbo服务的注册中心,两者结合起来可以实现微服务中的 服务注册、发现、负载均衡和健康检查,容错,动态配置管理的功能。 zk配置说明 zoo.cfg配置文件分析 tickTime=2000

Angular架构学习

心不动则不痛 提交于 2019-12-03 17:12:22
定义 Angular 是一个用 HTML 和 JavaScript 或者一个可以编译成 JavaScript 的语言(例如 Dart 或者 TypeScript ),来构建客户端应用的框架。 写 Angular 应用基本步骤: 用 Angular 扩展语法编写 HTML 模板, 用组件类管理这些模板,用服务添加应用逻辑, 用模块打包发布组件与服务。然后,我们通过引导根模块来启动该应用。 架构全景图 八个主要构造块 模块 Angular 模块是一个带有 @NgModule 装饰器的类,每个模块都是一个专注于某个应用领域、工作流或紧密相关的功能的、内聚的代码块。 NgModule是一个装饰器函数,它接收一个用来描述模块属性的元数据对象。其中最重要的属性是: declarations - 声明本模块中拥有的视图类。Angular 有 三种视图类:组件、指令和管道 。 exports - declarations 的子集,可用于其它模块的组件模板。 imports - 本模块声明的组件模板需要的类所在的其它模块。 providers - 服务的创建者,并加入到全局服务列表中,可用于应用任何部分。 bootstrap - 指定应用的主视图(称为根组件),它是所有其它视图的宿主。只有根模块才能设置bootstrap属性。 组件 组件负责控制屏幕上的一小块区域,我们称之为视图

微服务

别说谁变了你拦得住时间么 提交于 2019-12-03 17:00:40
微服务 什么是微服务 又称微服务 架构 ,是一种架构风格,它将应用程序构建为以 业务领域 为模型的小型自治服务集合 。 通俗地说,你必须看到蜜蜂如何通过对齐六角形蜡细胞来构建它们的蜂窝状物。他们最初从使用各种材料的小部分开始,并继续从中构建一个大型蜂箱。这些细胞形成图案,产生坚固的结构,将蜂窝的特定部分固定在一起。这里,每个细胞独立于另一个细胞,但它也与其他细胞相关。这意味着对一个细胞的损害不会损害其他细胞,因此,蜜蜂可以在不影响完整蜂箱的情况下重建这些细胞。 请参考上图。这里,每个六边形形状代表单独的服务组件。与蜜蜂的工作类似,每个敏捷团队都使用可用的框架和所选的技术堆栈构建单独的服务组件。就像在蜂箱中一样,每个服务组件形成一个强大的微服务架构,以提供更好的可扩展性。此外,敏捷团队可以单独处理每个服务组件的问题,而对整个应用程序没有影响或影响最小。 微服务架构有哪些优势? 独立开发 – 所有微服务都可以根据各自的功能轻松开发 独立部署 – 基于其服务,可以在任何应用程序中单独部署它们 故障隔离 – 即使应用程序的一项服务不起作用,系统仍可继续运行 混合技术堆栈 – 可以使用不同的语言和技术来构建同一应用程序的不同服务 粒度缩放 – 单个组件可根据需要进行缩放,无需将所有组件缩放在一起 微服务有哪些特点? 解耦 – 系统内的服务很大程度上是分离的。因此,整个应用程序可以轻松构建

经典必会款!服务端高并发分布式架构演进之路

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

Laravel 项目架构 弹性、可维护性

本小妞迷上赌 提交于 2019-12-03 13:59:00
公司项目可能需要对架构进行重建,老大给了我一个视频让我学习里面的思想,看完后觉得收获很大,主讲人对laravel项目各个层次有很清晰的理解,力求做到职责单一分明,提高可维护性。下面是我看完视频对其内容的大概整理,以及一些自己的见解,有错误的请指出。 视频: https://www.youtube.com/watch... (有墙各位懂的) Laravel简单架构: 简单的小项目可能会把数据库查询,业务逻辑,数据传给View几乎所有操作都放在Controller,如何项目后期需求变大,最后Controller会变得很臃肿,难懂,不易维护(同样,有些会把所有增删改查,功能类写在Model,Controller再从Model一个个的拿,导致Model很乱,Model有关联表的时候可能会引起一些不必要的数据库查询) 我自己的理解:用美宜佳卖商品给客人来理解,主要Controller是某个加盟商美宜佳门店,View是客人,Model是商品制造工厂(理解有些粗糙) Repository(商品仓库): 跟Eloquent/DB操作相关的,例如增删改查,直接和数据库打交道的基础操作抽出来放在Repository中,repository中文是仓库,我的理解就是我们要从Model拿数据,先放在仓库repository中,统一由仓库管理分配,发挥仓库的职责 Service(总部服务平台): 商业逻辑

微服务简单说

一笑奈何 提交于 2019-12-03 13:12:24
微服务简单说 1 微服务架构定义 微服务一词源自 马丁·福勒(Martin Fowler) 在2014 年的一篇博客: Microservices 该文章中对微服务定义如下: the microservice architectural style [1] is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage

后摩尔定律时代的计算力破局!

人走茶凉 提交于 2019-12-03 11:48:07
  后摩尔定律时代的计算力破局!   万物互联、人工智能等技术的成熟正在重构我们的生活方式,数据将以前所未有的速度累积增长,今后的智能设备数量会越来越多,体积越来越小,重量越来越轻。相应的,通过物联网,这些设备会把各式各样的数据源源不断地传输到后端的数据中心,数据来源的多样性、格式的复杂性和语义的不确定性,都将导致后端的计算量越来越大,对计算力的要求也越来越高。   当摩尔定律逐渐失效   过去的半个世纪,得益于半导体芯片产业飞速发展,在摩尔定律的驱动下,计算力一直保持着大跨度的发展。1956年,英特尔创始人戈登·摩尔提出,集成电路的集成度每两年会翻一番,后这个周期缩短到18个月,微处理器的性能每隔18个月提高1倍。   然而,硅芯片已逼近物理和经济成本上的极限,各界纷纷预测,摩尔定律在不久的将来面临失效,半导体工艺升级带来的计算性能的提升不能再像以前那么快了,每一代制程工艺的研发和成熟需要的时间将越来越长。制程发展减缓,新的替代材料和计算方式还未成熟,想要追求更高的计算力,可以从两个方向发展。   一个方向是向内,借助服务器系统架构的优化,打破数据读取瓶颈,从而提升单机计算力。当前,服务器普遍采用的是冯诺依曼架构,即计算和存储分离,而CPU的处理速度和数据的读取速度却无法匹配。纵观整个计算史,处理最缓慢的一部分就是从硬盘获取数据,很多处理性能都浪费在了等待数据到达上

DDD分层架构的三种模式

笑着哭i 提交于 2019-12-03 11:04:11
引言 在讨论DDD分层架构的模式之前,我们先一起回顾一下DDD和分层架构的相关知识。 DDD DDD(Domain Driven Design,领域驱动设计)作为一种软件开发方法,它可以帮助我们设计高质量的软件模型。在正确实现的情况下,我们通过DDD完成的设计恰恰就是软件的工作方式。 UL(Ubiquitous Language,通用语言)是团队共享的语言,是DDD中最具威力的特性之一。不管你在团队中的角色如何,只要你是团队的一员,你都将使用UL。由于UL的重要性,所以需要让每个概念在各自的上下文中是清晰无歧义的,于是DDD在战略设计上提出了模式BC(Bounded Context,限界上下文)。UL和BC同时构成了DDD的两大支柱,并且它们是相辅相成的,即UL都有其确定的上下文含义,而BC中的每个概念都有唯一的含义。 一个业务领域划分成若干个BC,它们之间通过Context Map进行集成。BC是一个显式的边界,领域模型便存在于这个边界之内。领域模型是关于某个特定业务领域的软件模型。通常,领域模型通过对象模型来实现,这些对象同时包含了数据和行为,并且表达了准确的业务含义。 从广义上来讲,领域即是一个组织所做的事情以及其中所包含的一切,表示整个业务系统。由于“领域模型”包含了“领域”这个词,我们可能会认为应该为整个业务系统创建一个单一的、内聚的和全功能式的模型。然而