zoukankan      html  css  js  c++  java
  • 互联网产品架构介绍

    一、简介

    本文是将这几年在web编程的学习经历,从一开始的LAMP到java web、Django,我都练习着自己搭建,也有参与开发百万用户级别的手机APP,本文是试着将目前网页和APP的整体架构做一些简单的介绍,对细节有兴趣深入了解的推荐可以看《大型网站技术架构:核心原理与案例分析》、《大型网站系统与Java中间件实践》这两本书。

    二、架构介绍

    上图是一个非常简单的架构,现在的架构比这个复杂非常多,先讲一下基本交互,这边先省略一些中间件,当我们在博客园的web页面点选某篇文章,假如这篇文章我们之前没浏览过,这个时候浏览器会将请求传送到博客园的服务器,请求首先会先来到网关,网关判断请求类型是要读取网页,就会将请求转到读取页面的模块,读取页面模块再根据用户想看的页面在数据库里找寻,并回传给用户,这样就完成了一个简单的交互,下面针对各部分再一一说明

    1、前端(web、APP、桌面客户端):

    一般来说,前端就是指我们可以看到的界面,像是现在在浏览的网页,还有手机里面的APP,图片,视频,这些都是称为前端,前端主要的功能是要和人做交互,做输入输出,一般来说web前端使用了HTML、CSS、javascript这三种语言,如果要看一个网页的前端语言只需要在浏览器按右键点“检查”就可以看到了,而现在主要的前端都会利用像是bootstrap、JQuery这些框架来编写,以提高效率。

    2、网关:

    网关类似公司的前台和办事柜台,功能很多,主要有用户鉴权(检查用户账号密码,判断是否为正常用户)、负载均衡(分散流量,避免过度拥挤)、路由和监控(通常需要和中间件一起完成一系列的工作)。以上只是比较常见的功能,网关会根据需求被赋予多种的功能。一般对外接口也是由网关负责。

    3、模块:

    在现在微服务架构又称这些模块为“服务”,早期LAMP架构是所有的功能都挤在一起,没有分模块,随着现在互联网功能越来越复杂,为了日后的修改与扩展方便,便将这些“功能”拆分,现在的软件都是基于低耦合高内聚的原则去设计各个模块,方便日后迭代,每个模块都具有不同的功能,一般以“接口”的形式提供他们的服务,比如说用户服务的模块,就是可以对用户数据库进行增删改,接口不仅可以提供给自己,也可以提供给外部的软件使用,使用方法会写在“接口协议”或是“API文档”上,一般是用HTTP协议,POST方式调研,JSON格式返回,里面还会写到鉴权方式,请求格式和返回格式,这些就是模块与模块互相交互的方式。

    4、数据库:

    顾名思义,数据库就是数据储存的地方,一般来说数据库可以分为关系行数据库(RMDBS)和非关系数据库,关系型数据库就像EXEL表一样,有行有列,每一列都有相对于的名称,比如说员工资料库就是一种关系型数据库,如下图,一般是用SQL语言来对数据库做增删改

    非关系型数据库NoSQL,比较常见的是KV型(一个Key对应一个Value)还有文档型数据库

    5、举例:

    假设今天有位新员工小美入职,职位是财务,首先我要在前端输入员工信息,前端会将这些信息带到网关,网关收到是要新增员工的请求,便将请求转发到“员工管理”的模块,模块传输数据库语言(例如MySQL)给数据库,数据库添加完成后返回添加成功的信息到前端,完成这一系列的操作

    三、中间件介绍

    上面的架构对于一个简单的应用其实已经够了,但是现在的互联网用户动辄百万,每天可能需要处理上亿条请求,功能负责又要快速响应,已经不是这种简单架构可以搞定的了,除了需要将多节点(Node)运行,还需要中间件的帮助,这边介绍几个比较常见的中间件

    1、服务注册、发现:

    常见的有zookeeper,主要功能是让网关知道有哪些服务,还有服务的位置(注册中心),服务是否正常运行等(健康检查),与网关一起合作,将用户发送的请求导向正确的处理模块。

    2、消息队列:

    常见的有reids等,主要功能是当请求量过大时,可以将请求放入到队伍中排队,再一一去处理,需要注意的是redis会将队列储存在内存里,需要准备足够的内存资源。

    3、应用管理、配置管理:

    互联网迭代周期短,需要时常进行新版本的迭代,从开发、测试到部署,都需要好的应用管理和配置管理系统,常见的有kubernates、apollo等,主要是负责将集成好的新版本部署到测试环境、预发布环境和生产环境,并进行配置的修改。

    四、高可用

    现在的软件都讲求高可用,意思就是大部分的时间要使用都可以使用,想想看如果有一天当你在排队结账的时候,支付宝突然不能用了,情况会是多么糟糕,所以高可用架构已经是当前的基本要求了。

    一般达到高可用的主要方法是冗余、备份,下面会针对每个环节分别说明。

    服务器:由于服务器故障是有可能突然故障的,当服务器发生故障的时候必须立刻通知路由系统,将接下来的请求发送到冗余服务器,假如服务器里有储存数据和资料的硬盘,也需要利用备份系统来回复(现在一般是使用RAID5),现在大型的网站都采用多节点虚拟机,即使某些硬件发生故障也不会影响到系统的正常运行。

    服务、应用:假设每个服务好像是一个负责处理车牌登记的管理人员,多节点就是我多雇佣了十个人,来帮忙分担车牌登记的工作,假如里面有人去上厕所或是生病,我也还有人可以来处理车牌登记的工作,而监控系统会随时告知系统目前人员的工作情况,一旦发现人数过少的情况就会立刻通知运维进行处理。一般来说会利用zookeeper之类的中间件来负责服务集群管理这类的工作。

  • 相关阅读:
    理解Promise函数中的resolve和reject
    一行代码 去除滚动条
    django开发前准备工作
    居中select中的option选项
    setTimeout中第一个参数
    利用es6解构赋值快速提取JSON数据;
    需要删除远程分支,刚好有正在别的分支做的事情
    vue项目处理dpr和多屏幕适配问题
    使用mockjs模拟后端返回的json数据;
    移动端页面中点击input输入框的时候弹出的键盘将输入框挡住的问题
  • 原文地址:https://www.cnblogs.com/yenpaul/p/9970343.html
Copyright © 2011-2022 走看看