热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

互联网演变过程

互联网演变过程文章目录互联网演变过程1简介2第一时期3第一时期的后期阶段集群**读写分离****搜索引擎**缓存引入数据库拆分问题4第二时期(垂直架构)项目拆分解决的问题问题5第三
互联网演变过程

文章目录

  • 互联网演变过程
    • 1 简介
    • 2 第一时期
    • 3第一时期的后期阶段
      • 集群
      • **读写分离**
      • **搜索引擎**
      • 缓存引入
      • 数据库拆分
      • 问题
    • 4 第二时期(垂直架构)
      • 项目拆分
      • 解决的问题
      • 问题
    • 5 第三时期(分布式架构)
      • 分布式方案
      • 问题
    • 6 第四时期(流动式计算架构)
      • 调度中心
    • 7 第五时期 (微服务架构)
      • 问题
    • 8 总结
      • 优点
      • 缺点

1 简介

  • web1.0 时代

  • web2.0时代

  • 互联网时代

  • 云计算+大数据时代

    阿里Dubbo的演变也充分体现了互联网架构的演变

《互联网演变过程》

2 第一时期

单一应用架构(All in one) 所有模块在一起,技术也不分层

《互联网演变过程》

网站的初期,也认为是换联网发展的最早期,会在单机部署上所有的应用和程序。

所有的代码都是写在JSP里面,所有的代码都写在一起,这种方式成为 all in one。

特点:

  1. 不具备代码的可维护性
  2. 容错性差

容错性,是指软件检测应用程序所运行的原件或硬件中发生的错误并从错误中恢复能力,通常可以从系统的可靠性、可用性、可测性等几个方面衡量。
单体地狱:只需要一个应用,将所有功能部署在一起,以减少部署节点和成本。

3第一时期的后期阶段

解决方案

  1. 分层开发(提高维护性)【解决容错性】
  2. MVC架构(Web应用程序的设计模式)
  3. 服务器的分离部署

《互联网演变过程》

特点:

  1. MVC分层开发
  2. 数据库分离部署

问题:

随着用户的访问量持续增加, 单台应用服务器无法满足需求。

集群

集群:同一个业务,部署在不同服务器上。

《互联网演变过程》

特点:

  1. 项目采用多台服务器(集群)部署。

优点:

  1. 支持高并发。
  2. 支持高可用。

问题:

  1. Session如何共享。

    Redis Cluster集群方案

  2. 这些集群的服务器、用户的请求该往哪里转发。

    用nginx服务器来完成分发请求、实现负载均衡策略机制。

《互联网演变过程》

问题:

  1. 我们通过集群方案nginx+taomcat将应用层的性能进行有效的提升。但是数据库的负载能力慢慢增加。

    怎么来提高数据库层面的访问压力(负载)。

读写分离

《互联网演变过程》

读写分离:主从数据库之间的数据同步, Master负载增删改查、slave负责读写操作。

mysql本身提供master-slave的方式完成主从复制的功能。

搜索引擎

数据库做读库的情况下、数据库本身对模糊查询的功能支持并不是特别优秀,像电商类的网站,搜索是非常核心的功能模块。即使做了读写分离这个问题也不能解决电商网页查询(分词技术)等,针对于该问题,引入搜索引擎。

目前流行的搜索引擎: solr elasticsearch whoosh

《互联网演变过程》

缓存引入

随着访问量的持续增加,数据库的访问压力变的越来越大(虽然做了主从复制)。 对于这些热点数据(用户访问频繁的信息),如果每次都到数据库中进行查询。(很多通用查询的功能)放在内存中又不特别合适。(手机登录验证码操作、为了Ip限制频繁访问服务器)尝试使用Redis。

数据库拆分

垂直扩展能力有限, 单个表:10002万到1亿(单个表的数据能力终归有限)。

  • 垂直拆分 冷热数据。

  • 水平拆分 按照:时间、地区(按照业务逻辑拆分)

  • 分库分表:采用第三方数据库中间件:mycat sharding-jdbc

《互联网演变过程》

当前状态:

通过设计保证高可用、高并发

问题

  • 问题1:服务器价格。

  • 问题2:可维护性差。

  • 问题3:可扩展性差。

  • 问题4:协同发展不方便。

  • 问题5:单体架构。导致服务部署时,文件变的越来越大。

4 第二时期(垂直架构)

垂直应用架构

当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。

项目拆分

拆分项目拆分完成后对项目进行聚合,提出概念父工程(ssm_parent)

exam-parent
pom.xml 项目需要在依赖信息、在父工程中定义、子模块继承。
exam-commos
exam-pojo
exam-service
exam-web

利用Maven做的模块的拆分和聚合。

解决问题:

  1. 模块复用

  2. 解决服务器部署内容变小

垂直拆分:

将一个大的应用拆分成互不相干的几个小应用, 每个应用都是独立的Web项目部署。

《互联网演变过程》

解决的问题

  1. 维护性(如果想做需求变更,只需要调整该应用模块即可)。
  2. 功能扩展(随着业务的不断增加,只需要创建新的应用即可)。
  3. 协同开发方便。
  4. 性能扩展。(只需要对访问量大的服务器多部署几台)。

问题

  1. 随着业务的不断增加,各个模块交互频繁

5 第三时期(分布式架构)

分布式:将一个业务拆成多个子模块。

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

《互联网演变过程》

《互联网演变过程》

以前如果在同一台服务器(模块之间的调用)

通过上图发现,不同的应用在不同的服务器上,服务之间的调用(RPC)

分布式方案

  • RPC (Remote procedure call)Dubbo
  • HTTP – spring cloud

架构的改变一定会带来新的技术和问题。

问题

  1. 分布式事务
  2. 分布式锁
  3. 分布式session
  4. 分布式日志管理
  5. 当服务越来越多,服务之间的调用会变得非常混乱
  6. 当服务越来越多,容量的苹果,小服务资源浪费的问题也组件显现。

6 第四时期(流动式计算架构)

流动计算架构(SOA)

当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。

SOA(面向服务架构)

调度中心

服务中间件(Dubbo/Spring Cloud)

《互联网演变过程》

7 第五时期 (微服务架构)

微服务:单体应用拆分成互不相干的小应用,每一个小应用都被称为微服务。

问题

  1. 构建单体应用时(SSM xml 需要相应的jar)

    当拆分多个微服务时(需要进行大量的代码和配置)

    答:Springboot 简化代码的初始化架构和开发配置

8 总结

优点

  1. 服务拆分粒度变得更细。服务复用性强、提高开发效率。
  2. 根据需求自定义优化方案。
  3. 适合互联网项目(产品迭代快、开发效率快)。

缺点

  1. 微服务过多,服务治理成本高。
  2. 不利于服务部署 部署不方便 (Docker/k8s)。
  3. 技术难点增加(分布式事务、分布式锁、分布式日志)。
  4. 对团队要求过高(dubbo/spring cloud)。

推荐阅读
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • 小程序的授权和登陆
    小程序的授权和登陆 ... [详细]
  • 本文介绍了多种开源数据库及其核心数据结构和算法,包括MySQL的B+树、MVCC和WAL,MongoDB的tokuDB和cola,boltDB的追加仅树和mmap,levelDB的LSM树,以及内存缓存中的一致性哈希。 ... [详细]
  • 探讨Redis的最佳应用场景
    本文将深入探讨Redis在不同场景下的最佳应用,包括其优势和适用范围。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 本文汇集了我在网络上搜集以及在实际面试中遇到的前端开发面试题目,并附有详细解答。无论是初学者还是有一定经验的开发者,都应深入理解这些问题背后的原理,通过系统学习和透彻研究,逐步形成自己的知识体系和技术框架。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • PHP自学必备:从零开始的准备工作与工具选择 ... [详细]
author-avatar
小菠萝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有