AnnVoV / blog

24 stars 2 forks source link

一些后端基础概念整理 #12

Open AnnVoV opened 6 years ago

AnnVoV commented 6 years ago

好文更新

谁说前端不需要懂-Nginx反向代理与负载均衡 https://juejin.im/post/5b01336af265da0b8a67e5c9?utm_source=wechat

整体结构图

IMAGE

Tomcat

tomcat 是一个web container(或者叫Servlet容器)生成动态web内容

Tomcat 作为容器做了什么

Apache 与 Nginx 的优缺点对比

参考:https://www.cnblogs.com/huangye-dream/p/3550328.html nginx优点: 轻量级,同样起web 服务,比apache 占用更少的内存及资源。 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下,nginx 能保持低资源低消耗高性能。

apache 相对于nginx 的优点: rewrite ,比nginx 的rewrite 强大 模块超多,基本想到的都可以找到 少bug ,nginx 的bug 相对较多 超稳定 存在就是理由,一般来说,需要性能的web 服务,用nginx 。如果不需要性能只求稳定,那就apache 吧。目前我们用Nginx作为web 服务器

端口的作用?

A port represents a logical connection to a particular piece of software running on the server hardware 如果没有端口号的话, server 就不知道client 要连哪个应用

web server 与 web contaienr app 之间如何关联的

IMAGE

Tomcat 如何找到请求url对应的servlet

servlet 有3种name

通过Deployment Descriptor(DD即web.xml配置文件)去做Servlet和URL的映射

IMAGE

tomcat 主要目录结构

java应用build后会生成webapp目录,通过脚本,我们会把生成的webapp放在tomcat文件夹下,大致结构为 IMAGE

开发时,java 文件一般就放在工程目录的src文件夹下没什么特别

分布式服务

既然每一个应用系统都需要执行许多相同的业务操作,比如用户管理、商品管理等,那么可以将这些共用的业务提取出来,独立部署。由这些可复用的业务连接数据库,提供共用业务服务,而应用系统只需要管理用户界面,通过分布式服务调用共用业务服务完成具体业务操作 IMAGE

RPC(Remote Procedure Call) 远程服务调用

参考:https://zhuanlan.zhihu.com/p/36427583 因为分布式,我们把一些相同业务抽离出来了形成Service B,那么显然Service A 需要调用Service B. IMAGE

这下问题来了,服务A里头并没有CalculatorImpl这个类,那它要怎样调用服务B的CalculatorImpl的add方法呢? 有同学会说,可以模仿B/S架构的调用方式呀,在B服务暴露一个Restful接口,然后A服务通过调用这个Restful接口来间接调用CalculatorImpl的add方法。 很好,这已经很接近RPC了,不过如果是这样,那每次调用时,是不是都需要写一串发起http请求的代码呢?比如httpClient.sendRequest…之类的,能不能像本地调用一样,去发起远程调用,让使用者感知不到远程调用的过程呢?

所以RPC 主要需要解决两个问题: 1.解决分布式系统中,服务之间的调用问题。 2.远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。使用代理模式,代理本地方法,由代理去发请求 目前我们的后端用的是dubbo,阿里的分布式服务框架 来进行远程调用。既然是分布式了,那么一个服务可能有多个实例,你在调用时,要如何获取这些实例的地址呢?这时候就需要一个服务注册中心,比如在Dubbo里头,就可以使用Zookeeper作为注册中心,在调用时,从Zookeeper获取服务的实例列表,再从中选择一个进行调用。

IMAGE

集群

对于用户访问集中的模块(比如网站的首页),需要让多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务,提供更好的并发特性。

缓存

反向代理:

反向代理属于网站前端架构的一部分,部署在网站的前端,当用户请求到达网站的数据中心时,最先访问到的就是反向代理服务器,这里缓存网站的静态资源,无需将请求继续转发给应用服务器就能返回给用户(我们的活动落地页shtml结尾的,就是用了varnish缓存的)

本地缓存:(用很少)

在应用服务器本地缓存着热点数据,应用程序可以在本机内存中直接访问数据,而无需访问数据库。

分布式缓存:

将数据缓存在一个专门的分布式缓存集群中,应用程序通过网络通信访问缓存数据

Memcached分布式缓存集群的访问模型

Memcached采用一种集中式的缓存集群管理,也被称作互不通信的分布式架构方式。缓存与应用分离部署,缓存系统部署在一组专门的服务器上,应用程序通过一致性Hash等路由算法选择缓存服务器远程访问缓存数据

如何理解不通信? 缓存服务器不只一台比如有十台 那么 以名字以1开头的缓存 我放在第一台, 以2开头的我放在第二台。。。。 这样子每台的数据都不一样 也不用去同步, 但是对于应用方来说 还是都一样的 IMAGE

异步消息队列

不用实时处理的内容,可以塞在队列里异步处理

HTTP vs Socket

因此,客户端定时向服务器端发送请求,不仅可以保持在线,同时也询问服务器是否有新数据,如果有就将数据传给客户端。 参考资料: 1.http://www.cnblogs.com/xclidongbo/p/4032904.html?utm_source=tuicool&utm_medium=referral 2.https://stackoverflow.com/questions/10765897/whats-the-memcached-server

目前中间层职责

IMAGE

参考资料: 1.zookeeper是什么 https://www.zhihu.com/question/37564946

  1. web 前后端分离的意义大吗? https://www.zhihu.com/question/28207685/answer/39893889 3.精读前后端渲染之争 https://github.com/camsong/blog/issues/8 4.淘宝前后端分离实践 http://2014.jsconf.cn/slides/herman-taobaoweb/index.html#/ 5.《大型网站技术架构》 6.《深入浅出ServletandJSP》 7.Apache与Nginx比较 https://www.cnblogs.com/huangye-dream/p/3550328.html 8.Http与Socket对比 http://www.cnblogs.com/xclidongbo/p/4032904.html?utm_source=tuicool&utm_medium=referral https://stackoverflow.com/questions/10765897/whats-the-memcached-server 9.如何通俗解释RPC? https://zhuanlan.zhihu.com/p/36427583