架构设计

Linux系统运维与架构设计-Unix/Linux概述

家住魔仙堡 提交于 2019-12-04 19:06:28
Linux系统运维与架构设计-Unix/Linux概述 Linux系统运维与架构设计 1.1 认识服务器及其核心组件 1.1.1 认识常用服务器 DELL,HP和IBM是互联网公司中使用最常用的服务器品牌。 其中互联网公司中使用最广泛的品牌DELL,常见的服务器型号按照不同的用途分为2u的R730/R730/R830和4U的R930,其中1U表示高度为4.45cm,其结构类型是机架式。 Dell R830 1.1.2 服务器硬件选型 服务器中重要的组件包含电源(如果是单台服务器通常都是双路电源,集群场景不需要使用双路电源),主板(作用类似于人体的骨架),CPU,内存和磁盘,网卡(集成在主板上)等等。 而系统运维人员需要重点关注服务器的CPU、内存、磁盘三大核心组件 CPU :服务器常用的CPU是基于X86指令集的英特尔至强Xeon( E3, E5, E7系类),根据用途不同服务器的CPU通常是2-4颗,单颗CPU是4-8核,如果是做虚拟化宿主机则需要4-8颗CPU,虚拟6-10个虚拟机。 内存:服务器的内存区间通常是16-256G(32G-64G更多),如果是做虚拟化的宿主机,内存总量一般是48-128G,用来虚拟6-10个虚拟机。 32位系统最多寻址2的32次方也就是4G个内存空间,64位系统最高寻址内存可以达到2的64次方也就是4G*4G内存空间,但是由于其他组件限制

敲开通往架构师的门

為{幸葍}努か 提交于 2019-12-04 12:04:42
最近学习了一些关于架构设计的知识想分享给大家。俗话说得好,不想当架构师的程序员不是好厨子。那么如何成为一名架构师呢?接下来就聊一聊我的一些想法。 什么是架构师 之前有同学问我,做了几年技术,应该转管理还是转架构师?对于这位同学,我给他的答案是,你要先踏踏实实做好现在的工作。因为就他提的问题来看,应该是刚入行不久或者是在校学生。 专心做技术的,都想做架构师。但架构师并不是说技术做时间长了可以转的。随着你的知识深度和广度的增加,在工作中会扮演更重要的角色,承担更大的责任,最终自然而然就会接触到架构设计的工作。 而架构师的主要工作,其实是利用架构设计知识以及丰富的工作经验,在设计架构时,结合实际情况,在不同的选项中做出取舍。 架构设计的真正目的? 为什么要进行架构设计?因为架构设计很重要?可是为什么重要呢?似乎说不清楚。 因为可以提升开发效率吗?也不一定,因为只有简单的设计才会使开发效率更高。而架构设计出于多方面考虑,不得已会引入一些复杂度,因此架构设计并不一定能提升开发效率。 是为了大多数口中的“高可用”、“高性能”、“可扩展”吗?其实也不是。我们的系统可能并不一定需要这些。 那架构设计的真正目的是什么呢?我认为架构设计的真正目的是与系统复杂度做斗争。 系统复杂度的来源有: 高性能、高可用、可扩展性、低成本、安全、规模 。 前面我们聊到有些系统可能不需要高可用、高性能

通用中小企业架构设计思路

走远了吗. 提交于 2019-12-03 20:55:00
在上一篇博客中( 浅谈微服务架构与.Net Core )我们谈到微服务架构与.Net Core,大体分析了下微服务架构的一些优势,在这边博客中,将谈谈架构设计的一些理念。 首先,代码要清晰明了,层次分明,模块间耦合度要尽量降低,代码并不是要越复杂越好,可能有人认为,代码写得越复杂、算法用的越高级,让别人越看不懂就越牛X,我认为恰恰相反,代码越是简单就能实现的就尽量做到简单,能用几行代码能解决的问题何必要写个牛X的算法来实现呢? 其次,能做到通用的模块需要单独提炼出来,不要在其他业务逻辑中混合实现,不利于代码的移植,以下简单说说常用的一些模块或逻辑需要特别注意的; 1、底层数据访问需要单独写,当我们数据库发生变化,比如我们这个项目用的是SqlServer,下个项目用的是MySQL,要做到很轻易的切换; 2、缓存管理需要独立出来,通常,我们开发都会用到缓存技术,能把缓存用好,系统性能也会得到大幅度提升,简单举个例子,比如我们开发一个系统,用的是MemoryCache,但是系统上线运行一段时间后,并发量增大,本机缓存已经不能满足需求,我们需要对系统进行集群,减轻服务器压力,此时需要用Redis来管理缓存,那么此时,我们需要做到很容易的从MemoryCache切换到Redis来做缓存管理,我们只需要改一下配置文件就能达到预期效果而不必在用到缓存的地方一个一个的去改再编译上线。 3

架构设计的目标

我们两清 提交于 2019-12-03 19:58:45
**架构设计,必须有明确的目标和宗旨。 **这是我长久以来的观点。 今天很幸运看到这两则文章,非常认同作者的观点。 这两则文章把架构设计的目的阐述得很精准,我将链接保存、分享至此: 架构之路(一):目标 架构之路(二):性能 以下是我从中摘选的一段: “架构的一个天然目的就是:让代码更智能, 让程序员更傻瓜。换个说法就是:架构要‘创造便利,让程序员更关注业务’。” “这可能是一个让程序员感到悲哀的事实。正如机械师不停的发明,让机器变得越来越聪明,取代流水线上的工人,最终取代了他自己。**从某种意义上说,我们都是自掘坟墓的人。**一个良好的架构,就应该让每一个普通的开发人员,都是一个廉价的、随时可以被替换的螺钉,这样才能保证整个系统永远健康的运行下去。” 来源: oschina 链接: https://my.oschina.net/u/2321528/blog/535544

大型网站技术架构-发展过程

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

分布式 | Dubbo 架构设计详解

匿名 (未验证) 提交于 2019-12-03 00:37:01
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。关于注册中心、协议支持、服务监控等内容,详见后面描述。 总体架构 Dubbo的总体架构,如图所示: Dubbo框架设计一共划分了10个层,而最上面的Service层是留给实际想要使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层。图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口, 位于中轴线上的为双方都用到的接口。点击这里可以了解更多架构设计图。 下面,结合Dubbo官方文档,我们分别理解一下框架分层架构中,各个层次的设计要点: 服务接口层(Service):该层是与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。 配置层(Config):对外配置接口,以ServiceConfig和ReferenceConfig为中心,可以直接new配置类,也可以通过spring解析配置生成配置类。 服务代理层(Proxy):服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton

大型分布式网站架构设计--第1章 面向服务体系的架构

匿名 (未验证) 提交于 2019-12-03 00:27:02
本章目录: 分布式Java应用图: 分布式Java应用:大型系统会被拆分成多个子系统来实现,对于Java来说,这些子系统可能部署在同一台机器上不同的JVM,或者部署在不同机器上,但是这些子系统之间要进行相互通信来共同实现业务功能。 分布式应用架构的演变 分布式应用架构面临的首要问题,便是如何实现应用之间的远程调用(RPC)。有两种方式:一种是基于HTTP的RPC,一种是基于TCP的RPC。 RPC也就是远程调用,RPC的实现包括客户端和服务端,也就是服务提供方和服务调用方,服务调用方发送RPC请求到服务提供方,服务提供方根据服务调用方的参数执行请求方法,将执行结果返回给调用方,这就是一次RPC请求。 要注意 无论是什么类型的数据,最终都是要转成二进制在网络上传输。 对象的序列化:就是将对象转成二进制流的过程。 对象的反序列化:就是将二进制流转成对象的过程。 Java中的序列化代码: //定义一个字节数组的输出流 ByteArrayOutputStream os= new ByteArrayOutputStream(); //对象的输出流 ObjectOutputStream out = new ObjectOutputStream(os); //将对象写入字节数组输出,进行序列化 out .writeObject(zhangsan); byte [] zhangsanByte=os

架构设计

匿名 (未验证) 提交于 2019-12-03 00:17:01
架构设计的目的: 为了解决软件系统复杂度带来的问题。 复杂度的来源: 一:高性能 1.单机复杂度 2.集群的复杂度 来源:51CTO 作者: 爱与梦想 链接:https://blog.51cto.com/11009785/2447765

互联网架构设计漫谈 (2)

匿名 (未验证) 提交于 2019-12-02 23:32:01
互联网架构设计漫谈 (2) 应用的接入层通常需要承载大量的网络请求,有些互联网企业几十万PV请求,在软件负载均衡无法支撑的情况下会考虑采用硬件负载均衡的技术帮助控制流量,然后再转发给软件负载均衡进行进一步的分发。 要点: 什么是硬件负载均衡? 硬件负载均衡的优缺点是什么? 使用的注意事项以及应用的场景? 硬件负载均衡器实现哪些功能? 什么是硬件负载均衡? 网络结构图 硬件负载均衡解决方案是直接 在服务器和外部网络间安装负载均衡设备 ,这种设备我们通常称之为负载均衡器,由于专门的设备完成网络请求转发的任务,独立于操作系统,整体性能高,负载均衡策略多样化,流量管理智能化。 硬件负载均衡的优缺点是什么? 优点:直接连接交换机,处理网络请求能力强,与系统无关,负载性可以强。可以应用于大量设施、适应大访问量、使用简单。 缺点:成本高,配置冗余.即使网络请求分发到服务器集群,负载均衡设施却是单点配置;无法有效掌握服务器及应使用状态. 使用的注意事项以及应用的场景? 注意事项,需要注意的是硬件负载均衡技术 只专注网络判断 ,不考虑业务系统与应用使用的情况。有时候系统处理能力已经达到了瓶颈,但是此时网络并没有异常,由于硬件负载均衡并没有察觉到应用服务器的异常,还是让流量继续进入到应用服务器。 使用场景,一般应用与PV 几十万甚至百万的互联网应用,一般的软件负载均衡器例如Nignx 处理并发一般在1