架构师训练营 - 第 4 周命题作业

用户头像
红了哟
关注
发布于: 2020 年 07 月 05 日
架构师训练营 - 第 4 周命题作业

从用户出发,依次为一下技术方案和手段

前端架构:

app及Web开发技术:提供用户看的的图片文字信息的展示



浏览器及HTTP优化技术:提供图片文字信息的一个展示处理和传输处理途径



CDN(Content Delivery Network)内容分发网络服务:构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。



动静分离技术:动静分离是将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。动静分离的一种做法是将静态资源部署在nginx上,后台项目部署到应用服务器上,根据一定规则静态资源的请求全部请求nginx服务器,达到动静分离的目标。



图片服务:专门为图片读写操作优化的独立服务器,分担 Web 服务器的 I/O 负载 - 将耗费资源的图片服务分离出来,提高服务器的性能和稳定性;能够专门对图片服务器进行优化 - 为图片服务设置有针对性的缓存方案,减少带宽成本,提高访问速度;提高网站的可扩展性 - 通过增加图片服务器,提高图片吞吐能力



方向代理(nginx,LVS等):位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。



DNS(Domain Name System)域名系统:Internet上解决网上机器命名的一种系统。就像拜访朋友要先知道别人家怎么走一样,Internet上当一台主机要访问另外一台主机时,必须首先获知其地址,TCP/IP中的IP地址是由四段以“.”分开的数字组成,记起来总是不如名字那么方便,所以,就采用了域名系统来管理名字和IP的对应关系。



网关及应用层架构:

网关架构:在网络设备里面,比如两个相互独立的局域网段之间通过路由器或者桥接设备进行通信, 这中间的路由或者桥接设备我们称之为网关。相应的 API 网关将各系统对外暴露的服务聚合起来,所有要调用这些服务的系统都需要通过 API 网关进行访问,基于这种方式网关可以对 API 进行统一管控,例如:认证、鉴权、流量控制、协议转换、监控等等。API 网关的流行得益于近几年微服务架构的兴起,原本一个庞大的业务系统被拆分成许多粒度更小的系统进行独立部署和维护,这种模式势必会带来更多的跨系统交互,企业 API 的规模也会成倍增加,API 网关(或者微服务网关)就逐渐成为了微服务架构的标配组件。



负载均衡:将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案;常见的实现方式中,主要可以在应用层、传输层、网络层和数据传输层做文章。所以,工作在应用层的负载均衡,我们通常称之为七层负载均衡、工作在传输层的我们称之为四层负载均衡;负载均衡服务器在决定将请求转发到具体哪台真实服务器的时候,是通过负载均衡算法来实现的。负载均衡算法,是一个负载均衡服务器的核心。负载均衡算法可以分为两类:静态负载均衡算法和动态负载均衡算法。



动态页面静态化:动态页面非常便于管理。但是访问网页时还需要程序先处理一遍,所以导致访问速度相对较慢。而静态页面访问速度快,却又不便于管理。那么动态页面静态化即可以将两种页面的好处集中到一起。页面静态化的方案:1、使用文件读写功能生成静态页面;2、使用nosql从内存中读取内容(其实这个已经不算静态化了而是缓存),比如说redis,虽然没有纯静态化那么快,但是要远比查数据库快的多。静态化方案需要注意的问题:1、静态页面中动态(即时)数据问题。通过Ajax可以解决;2、静态化内容,一旦改动,都需要重新生成静态页面。



业务拆分:随着公司业务的发展现有系统无法满足现有系统的高耦合不便于多人协同开发和部署管理,从而需要对关键业务进行拆分,将主要业务单独拆分出来作为一个独立的子系统提供以前同样的服务,拆分时需要考虑到多方因素,是否有必要拆分,拆分出来的业务是否是关键业务,拆分后跟老系统的协同提供服务等等问题,拆分后也可以更有针对的发展关键业务,对关键业务的高并发高可用等要求得到进一步提升。

服务层架构:

微服务架构(Microservice Architecture):一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。你可以将其看作是在架构层次而非获取服务的类上应用很多SOLID原则。微服务架构是个很有趣的概念,它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。概念:把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。定义:围绕业务领域组件来创建应用,这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能,使产品交付变得更加简单。本质:用一些功能比较明确、业务比较精练的服务去解决更大、更实际的问题。



分布式消息队列:消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。 目前在生产环境,使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等。



分布式缓存:分布式缓存首先也是缓存,一种性能很好但是相对稀缺的资源,和我们在课本上学习的CPU缓存原理基本相同,CPU是用性能更好的静态RAM来为性能一般的DRAM加速,分布式缓存则是通过内存或者其他高速存储来加速,但是由于用到了分布式环境中,涉及到并发和网络的问题,所以会更加复杂一些,但是有很多方面的共性,比如缓存淘汰策略。计算机行业有一句鼎鼎大名的格言就指出了缓存失效的复杂性。

There are only two hard things in Computer Science: cache invalidation and naming things (计算科学中最难的两件事是命名和缓存失效)

– Phil Karlton



分布式一致性(锁)服务:在单机环境下,由于使用环境简单和通信可靠,锁的可见性和原子性很容易可以保证,可以简单和可靠地实现锁功能。到了分布式的环境下,由于公共资源和使用方之间的分离,以及使用方和使用方之间的分离,相互之间的通信由线程间的内存通信变为网络通信。网络通信的时延和不可靠,加上分布式环境中各种故障的常态化发生,导致实现一个可靠的分布式锁服务需要考虑更多更复杂的问题。锁,核心是协调各个使用方对公共资源使用的一种机制。当存在多个使用方互斥地使用某一个公共资源时,为了避免并行使用导致的修改结果不可控,需要在某个地方记录一个标记,这个标记能够被所有使用方看到,当标记不存在时,可以设置标记并且获得公共资源的使用权,其余使用者发现标记已经存在时,只能等待标记拥有方释放后,再去尝试设置标记。这个标记即可以理解为锁。在单机多线程的环境下,由于使用环境简单和通信可靠,锁的可见性和原子性很容易可以保证,所以使用系统提供的互斥锁等方案,可以简单和可靠地实现锁功能。到了分布式的环境下,由于公共资源和使用方之间的分离,以及使用方和使用方之间的分离,相互之间的通信由线程间的内存通信变为网络通信。网络通信的时延和不可靠,加上分布式环境中各种故障的常态化发生,导致实现一个可靠的分布式锁服务需要考虑更多更复杂的问题。目前常见的分布式锁服务,可以分为以下两大类:  1、基于分布式缓存实现的锁服务及其变种:典型代表是使用Redis实现的锁服务和基于Redis实现的RedLock方案; 2、基于分布式一致性算法实现的锁服务:典型代表为Zookeeper和Chubby。



存储层架构:

分布式文件(Distributed File System,DFS):把大量数据分散到不同的节点上存储,大大减小了数据丢失的风险。分布式文件系统具有冗余性,部分节点的故障并不影响整体的正常运行,而且即使出现故障的计算机存储的数据已经损坏,也可以由其它节点将损坏的数据恢复出来。因此,安全性是分布式文件系统最主要的特征。分布式文件系统通过网络将大量零散的计算机连接在一起,形成一个巨大的计算机集群,使各主机均可以充分发挥其价值。此外,集群之外的计算机只需要经过简单的配置就可以加入到分布式文件系统中,具有极强的可扩展能力。



分布式关系数据库-DRDS(Distribute Relational Database Service):它主要是一种水平拆分、可平滑扩容、读写分离的在线分布式数据库服务。DRDS在使用的过程中存在于我们的应用和数据库之间,当单台的RDS没有办法满足我们大型业务的需要和支撑的时候,利用DRDS可以去增加更多RDS的服务的节点。DRDS在中间起到了一个转发的效果,所以DRDS本身是不存数据的,数据还是存在于RDS中。DRDS对于应用层是透明的,用户在使用DRDS的时候和直接使用RDS没有感观上的差别。DRDS 主要解决了以下问题:单机数据库容量瓶颈: 随着数据量和访问量的增长,单机数据库会遇到很大的挑战,依赖硬件升级并不能完全解决问题;单机数据库扩展困难:传统数据库容量扩展往往意味着服务中断,很难做到业务无感知或者少感知;传统数据库使用成本高: 当业务数据和访问量增加到一定量时,传统数据库需要依赖特定的高端存储和小型机设备,成本曲线快速上升。



NoSQL数据库:NoSQL最常见的解释是“non-relational”, “Not Only SQL”也被很多人接受。NoSQL仅仅是一个概念,泛指非关系型的数据库,区别于关系数据库,它们不保证关系数据的ACID特性。NoSQL是一项全新的数据库革命性运动,其拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。NoSQL有如下优点:易扩展,NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间也在架构的层面上带来了可扩展的能力。大数据量,高性能,NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。



后台架构:



大数据平台:为了计算,现今社会所产生的越来越大的数据量。以存储、运算、展现作为目的的平台。是允许开发者们或是将写好的程序放在“云”里运行,或是使用“云”里提供的服务,或二者皆是。类似目前很多舆情监测软件大数据分析系统,大数据平台是一个集数据接入、数据处理、数据存储、查询检索、分析挖掘等、应用接口等为一体的平台。首先我们要有数据源,然后对数据进行收集和存储,在这基础上,再进行分析和应用,形成我们的产品和服务,而产品和服务也会产生新的数据,这些数据会循环进入我们的流程中。当这个循环体系成为一个智能化的体系,便会成为一种新的模式,然后具体运用到实际的应用中,一种是精准化定制,二是预测



搜索引擎:即一个计算机应用软件系统,或者说是一个网络应用软件系统。从用户的角度看,它根据用户提交的类自然语言查询词或者短语,返回一些列很可能与该查询相关的页面信息,供用户进一步判断和选取。为了有效地做到这一点。它大致分为三个功能模块:爬行抓取、预处理、查询服务



推荐引擎:能够实时给用户提供推荐服务,用来解析用户请求,将物料数据与画像数据打通,匹配符合用户兴趣的物料,同时调用算法召回,控制整体候选集多样性。通过排序预测服务为候选集打分排序给出用户可能感兴趣的结果,并根据业务和体验规则对推荐结果进行重排序,呈现给用户最终结果。同时推荐引擎还承担着线上AB实验精准分桶的功能,保证实验流量的科学分配,提升实验效果的置信度。因此涉及推荐引擎核心功能的主要有用户请求解析、实验分桶染色、召回、排序、重排等模块。



数据仓库:是一个面向主题的、集成的、随时间变化的、信息相对稳定的数据结合,它用于对企业管理和决策提供支持。建立数据仓库的三个基本条件1)该行业有较为成熟的联机事务处理系统,它为数据仓库提供业务分析的客观条件和数据来源(也就是说这个行业要有大量的数据);2)该行业面临市场竞争的压力,需要通过数据分析服务业务,它为数据仓库的建立提供外在的动力;3)该行业为数据密集型行业,比如金融,供应链等。



运维与安全:



数据采集与展示:为了进行数字化IT治理,需要对一些应用进程相关指标进行采集并入库。收集到的应用指标数据最好要进行ES入仓,入到Kafka里面,并通过Kibana可视化展示。



数据监控与报警:监控的核心应该是基于用户的监控,还有另外一种说话叫做“基于症状的监控”,同时还有另外一种监控方式“基于原因的监控”。我们更加推荐基于用户监控,比如:作为你产品的用户不会去关心你的MySQL是否是健康的,而用户关心的是输出是否能够正常加载,功能是否正常使用。光有监控而报警机制跟不上,不能及时把紧急情况下的信息传递给运维技术人员,那么监控形同虚设。现在报警信息发送途径主要有邮件、IM、SMS 三种(过去书籍中提到的传呼方式已是明日黄花)。值得一提的是,报警服务器本身也需要监控的。建议定期发送测试邮件、测试短信来验证告警功能处于正常状态。尤其是在节假日来临前更要反复确保该功能是正常可用的。



攻击与防护:攻击:1.发送木马 2.局域网嗅探 3.如果PC提供服务器服务可以DDOS 或者CC 4.扫描漏洞入侵 5.局域网ARP攻击。防护:1.不要打开陌生的文件和邮件、网站 安装杀毒软件和防火墙2.关闭多余服务,安装防火墙,使用加密协议传输数据,或者对数据加密 3.只开必要的端口和服务,安装防火墙和杀毒软件 4.修复系统漏洞,安装杀毒软件和防火墙,把机器内的软件升级到最新稳定版本,关闭无用服务和驱动以及危险端口 5.绑定MAC地址,安装ARP防火墙,安装杀毒软件和防火墙。另外对系统的组策略、服务进行设置可以提高系统安全性。



数据加密与解密:加密incode:对明文(可读懂的信息)进行翻译,使用不同的算法对明文以代码形式(密码)实施加密。该过程的逆过程称为 解密(descode),即将该编码信息转化为明文的过程。



发布于: 2020 年 07 月 05 日 阅读数: 38
用户头像

红了哟

关注

还未添加个人签名 2019.08.15 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 - 第 4 周命题作业