一、企业级应用架构解析

应用特点

  多环境多系统的交互

  海量数据、高并发【用户访问量】、高TPS【每秒吞吐量】

  安全等级高

  自动化集群管理

架构原则

  CAP原则(一致性【数据变动要同步】、可用性【随着数据访问量增长保证性能,数据库性能管理】、分区容错性)

  复杂的事情简单化

架构的目标

  高速缓存 【redis、Memcached等技术】

  并行计算

  负载均衡

  数据备份【主备份,线上库到离线库备份】

  异地容灾【备用多个机房存储数据库】

  业务分离【拆分大应用为多个小应用,以服务化的方式暴露接口,简化应用】

二、架构发展:

2.1 原始版:

  用户+服务器【单台虚拟机】+数据库【mysql或者oracle】,用户访问量比较少,该企业架构特点:单节点【只有一台机器】,几乎无容灾【如果机器挂了只能重启】,负载能力低【访问量比较少】,维护简单【只有一台服务器,所以对应用监控比较简单,数据库管理比较简单,企业部署成本比较低】

2.2 动静分离版

  加入Nginx,通过Nginx来访问静态资源,用户通过REST API来访问Web应用,通过ajax获取数据,提交数据,极大减少了和用户交互的流量, html、js、css大资源通过Nginx传送给用户,降低交互流量,Nginx还负责均衡,同时增加服务器部署,可以提高访问量。使用了框架spring,Struts,mybatis,节省开发时间。该架构特点:Nginx访问静态资源,Nginx负载均衡,应用分离,依赖框架,安全性低【暴露REST API】,Session 持久化问题【部署了多台服务器,Session持久化成为问题】。

2.3 缓存版

  加入高速缓存,支持key-value形式的查询,可以达到6w/s查询量。基于请求的缓存,当http请求发起,先去查询高速是否有结果,没有的话,查询数据库,写入高速缓存,返回给用户;基于查询结构缓存,先根据相应条件查询高速缓存,没有的话则查询数据库,写入缓存返回给用户;将Session存于高速缓存里头,当多台机器访问应用时,将session的id在高速缓存进行查询。该架构特点:大量使用缓存、Nginx接收Https、Session 持久化、一致性问题【数据同步问题】、缓存失效问题【设置session失效时间】,虽然还存在后两者的问题,但是极大提高企业负载能力。

 2.4 分布式服务

  分布式架构,拆分业务功能,保证功能不变的情况下,将应用拆分前端web应用和后端服务,后端服务又拆分多个小应用,共同提供服务,将服务封装起来,提供逻辑。web如何将多个应用提供给远程调用,这时候就要提供服务总线\注册中心进行应用管理,例如分布式框架dubbo。该架构特点:小型机虚拟化【将服务器部署在虚拟机中】、请求处理与业务拆分、应用服务化、同步异步拆分、数据库读写分离【查询映射到读库上】、运维难度大大增加。消息中间件:例如mq、Metaq中间件,将大量异步操作发送到中间件,后台均匀消费这些请求,同步异步拆分提升吞吐量。调度中间件:ScheduleX。该架构缺点:当出现高并发的时候,对于小型机压力很大。

2.5 弹性计算

  采用Docker容器级虚拟化,使得服务器资源实时分配。当负载大时候,docker虚拟并启动应用。新增Hadoop日志搜集平台,将日志写入日志平台。通过与Docker配合极大提高负载性能。该架构特点:容器级虚拟化、应用资源动态分配、离线数据采集分析系统、数据库读写分离、硬件成本下降、异地容灾。数据库新增了于hadoop进行交互,极大提升了性能。

三、常见的服务治理的方式

3.1 多域名分配

  每个应用专属域名

  Http做进程通信

  硬件负载或者Nginx

  多语言

  安全性较低

  无法编辑检查

3.2 企业服务总线

  支持多种方式路由以及注册

  工作流的集成 高效、

  容易维护

  过度依赖于中心

  软件成本高

3.3 分布式服务框架

  无中心也可以工作

  基于接口编译检查

  Java环境中开发学习成本低

  高效、高可用

  多语言支持不足

J2EE企业级应用架构的更多相关文章

  1. J2EE企业级应用架构发展

    一. 准备工作 1. 本文参考 J2EE企业级应用架构 二. 架构发展 1. 原始版 用户+服务器[单台虚拟机]+数据库[mysql或者oracle],用户访问量比较少. 特点:单节点[只有一台机器] ...

  2. 读书笔记: Microsot .NET企业级应用架构设计

    Microsot .NET企业级应用架构设计 Dino Esposito   Andrea Saltarello 编    陈黎夫 译   人民邮电出版社 第一部分 设计原则 第1章 当代架构师和架构 ...

  3. MS .NET企业级应用架构设计笔记1(关于业务层)

    本文针对<MS .NET企业级应用架构设计>业务层前半部分做了相关笔记并记录了自己的一点想法.对于后半部分的具体模式将在第二次笔记中体现.   关于Layer与Tier Layer一般用来 ...

  4. J2EE WEB应用架构分析

    1. 架构概述 J2EE体系包括java server pages(JSP) ,java SERVLET, enterprise bean,WEB service等技术.这些技术的出现给电子商务时代的 ...

  5. [转载]企业级应用架构(NHibernater+Spring.Net+MVC3)

    本人已经从事公司两套这类架构系统的开发工作啦!对于这套架构,我惊叹不已!BPS和CMS系统都是采用这套架构.但本人也同时渐渐发现了这套架构有诸多 不足之处,于是本人利用闲暇时光进一步改进了这套架构.新 ...

  6. [转]专访企业QQ SaaS团队,谈企业级LNMP架构设计

    FROM : http://www.csdn.net/article/2014-08-20/2821302-interview-tencent-b-qq-shuai-wang 对比IaaS和PaaS, ...

  7. J2EE的体系架构

    J2EE是Java2平台企业版(Java 2 Platform,Enterprise Edition),它的核心是一组技术规范与指南,提供基于组件的方式来设计.开发.组装和部署企业应用.J2EE使用多 ...

  8. J2EE的体系架构——J2EE

    J2EE是Java2平台企业版(Java 2 Platform,Enterprise Edition),它的核心是一组技术规范与指南,提供基于组件的方式来设计.开发.组装和部署企业应用.J2EE使用多 ...

  9. 企业级应用架构模式N-Tier多层架构

              先来看经典的3层架构,看下图: 涉及到平台可以是: Ruby on Rails, Java EE, ASP.NET, PHP, ColdFusion, Perl, Python 层 ...

随机推荐

  1. C语言中printf与i++,C++中的cout

    一,printf与i++ 1,C语言中的printf是自右向左输出,. 2,而i++与++i不同的 i++首先取得i的值,下一行时候i = i + 1: ++i,首先i = i + 1,再取得i的值. ...

  2. 【FAQ】Maven 本地仓库明明有jar包,pom文件还是报错解决办法

    方法一: 找到出错的jar包文件位置,删掉_maven.repositories文件 方法二: maven中的本地仓库的index索引没有更新导致 解决方案: 在eclipse中打开菜单 window ...

  3. 微信小程序ofo小黄车+thinkphp5.0打造全栈应用

    原文地址:https://www.imooc.com/article/20310 ofo至今还没有微信小程序(很费解),每次用ofo都得去支付宝,很不方便,我用微信用的比较多,无意间在简书上面看到某人 ...

  4. 数据分析:pandas 基础

    pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包 类似于 Numpy 的核心是 ndarray,pandas 也是围绕着 Series 和 DataFrame 两个核心数据 ...

  5. mybatis一级缓存与二级缓存的原理

    1.mybatis中的缓存是在mybatis框架中的Executor中来实现的,我们来看一下Executor的继承图 2.通过以上类图我们可以发现Executor接口下有两大实现类BaseExecut ...

  6. leetcode-888-公平的糖果交换

    题目描述: 爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 块糖的大小,B[j] 是鲍勃拥有的第 j 块糖的大小. 因为他们是朋友,所以他们想交换一个糖果棒,这样交换后,他们都有相同的 ...

  7. JavaScript变量那些事

    引言 JavaScript的变量本质是松散类型的,也就是说其变量就是用于保存特定值的一个名字,变量的值和数据类型可以在脚本执行的生命周期中发生变化.这是一个很有趣很强大的特性,但是也是一个极容易出错误 ...

  8. maven web不能创建src/main/java等文件等问题

    我们在创建maven web项目的时候,默认只有src/main/resources这个source folder,我们按照maven结构添加src/main/java和src/test/java等s ...

  9. 内核诊断(1)interrupt took too long

    The linux kernel gathers samples using 'perf' performance monitor without affecting the latencies. T ...

  10. mongo 授权访问

    1.授权远程也可以访问 - 首先修改mongodb的配置文件 让其监听所有外网ip 编辑文件:/etc/mongodb.conf 修改后的内容如下: bind_ip = 0.0.0.0 port = ...