写点什么

第四周作业总结

用户头像
Geek_ce484f
关注
发布于: 2020 年 10 月 18 日

前端使用前后端分离架构

后台使用大数据领域,MapReduce、Yarn、Spark、Flink 等。搜索框架 ElasticSearch、数据仓库 Hive。


DNS

DNS 是一种分布式网络目录服务,主要用于域名与 IP 地址的相互转换。它能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的 IP 数串。当查询(域名) IP 时,路由或 ISP 提供连接 DNS 服务器的信息,在一些全球布局的互联网服务中,DNS 可以帮助用户连接到就近部署服务器。


CDN

内容分发网络,可以理解成是一中缓存服务器,这些缓存服务器分布在用户访问集中的地区或网络中,用于解决用户不同地域或运营商网络环境,访问资源响应慢的问题。


图片服务

系统中存储的一些图片或其他静态资源,可通过 nginx 反向代理等,直接提供访问,而不需要通过应用服务去中转,从而提升请求速度。而这些静态资源也可以很好的通过 CDN 加速访问。个人使用过的是 FastDFS 分布式文件系统,上面通过 nginx 映射到图片目录,然后用户访问到最前端的 nginx 反向代理,在转发到 FastDFS 图片目录对应的 nginx 的 IP 端口上。


动静分离、页面静态化

将动态的资源和静态的资源请求分担到不同的服务器上。


网关层

负载均衡

一般大型一点的网站,在 nginx 的前面还要加一层硬件负载均衡器,处理能力更强。例如 F5 或深信服的 AD。


反向代理

一般互联网公司使用 nginx 比较多。而 nginx 可以使用 keepalived 搭建主从结构的 nginx 集群,通过虚拟 IP 对外提供服务,当主机挂掉,虚拟 IP 则漂移到备机,保证对外提供的 IP 不变。


服务网关

如果在 SpringCloud 的体系中,一般使用 Zuul 网关较多。在网关层,我们可以完成对请求的一些前置处理,例如鉴权、限流、追踪等。在通过了前置处理后,将请求转发到后端服务。未通过,例如 token 无效或不具备 API 的访问权限或超过限流阈值等,则直接返回。


也有直接在 nginx 上做网关的,通过 lua 脚本去处理一些逻辑。


服务层

微服务架构成为当今流行,而微服务架构中必不可少的几个组件:


注册中心

在 SpringCloud 的体系中,比较流程的注册中心有 Eureka、Consul 等。他们为微服务提供了服务的注册与发现。而在 Dubbo 体系中,用得比较多的是 Zookeeper。


微服务的负载均衡

在 SpringCloud 体系中,通过 Ribbon 实现,他给客户端提供的服务的发现和负载策略的选择。而在 Dubbo 中可直接通过配置 consumer 的属性指定负载策略。


微服务请求端

SpringCloud 中通过 Feign 工具,作为微服务的客户端,使得我们更容易的使用注册中心和负载均衡。而在 Dubbo 中通过 interface 的 method 直接调用,Dubbo 会为我们生成代理对象,完成 RPC 调用。


分布式配置管理

互联网公司的微服务众多,每个服务都有一些配置文件,当我们需要修改的时候会变得越来越困难。而且一般来说,修改了配置后,需要重启服务才能生效。


而分布式配置管理的出现,让我们可以更好的管理和维护应用的配置,甚至可以做到实时生效。常见的工具有 Disconf,spring-cloud-config,apollo 等,目前版本的 Dubbo 也提供了配置管理,也可以自己实现在 zookeeper 上的配置管理。


分布式任务框架

由于微服务环境下,一个微服务可能同时部署了多台服务器,而我们可能只希望有一个服务器来进行定时任务的执行。像 LTS、Quartz、elasticJob 等为我们提供了响应的解决方案。


服务追踪框架

微服务众多的情况下,某一次请求失败了,当我们要去众多的调用链路中找到出现问题的那个地方显得非常的困难。那么有一个分布式跟踪系统,来帮助我们快速找到,就特别理想了。类似的框架有 spring-cloud-sleuth、Pinpoint 等。


消息队列

消息队列主要作用就是削峰填谷、服务解耦。常见的 MQ 有 Kafka、RocketMQ、RabbitMQ 等。


缓存

分为本地缓存和服务端缓存。


本地缓存可使用 GuavaCache,服务端缓存 Redis。


存储层

分布式文件系统

像访问本地文件一样的有 NFS,共享存储的方案。


而通过其他网络协议,有 HDFS、FastDFS、Seaweeds。可以实现文件的分布式存储,容易的扩容。


分布式关系型数据库

一般互联网公司用的多的关系型数据库就是 mysql 了,mysql 本身的高可用,考虑使用 MHA 等高可用的方案,而对于数据一致性要求较高而性能不怎么高的场景使用 PXC 的方案。


而随着互联网业务发展,数据量的增长后,随着业务的垂直拆分,数据库一般也会垂直拆分。


在垂直拆分后,仍然无法满足大量的数据存储,则考虑数据库的水平拆分,水平拆分又可分为分库和分表,目前分库分表有中间件的方案例如 MyCat,或基于 JDBC 层的 ShardingSphere。


NoSQL 数据库

Redis 我把他放在了缓存部分,这里就不赘述。


其他的比如 HBase,提供了列式存储,减少了空间占用也提高了读性能,支持千亿级的大数据量。

用户头像

Geek_ce484f

关注

还未添加个人签名 2020.05.10 加入

还未添加个人简介

评论

发布
暂无评论
第四周作业总结