zoukankan      html  css  js  c++  java
  • 分布式思维笔记

    一、java语言的主流方向

    java编程里,两个难点:高并发/高可用

    java语言 ,后期主要就是学习  java架构,

    二、计算机与互联网的发展

    apache 第web服务器:静态网页服务器----1995年。

    lamp组合,开启互联网的大门。

    三、互联网的行业变迁

    web1.0:少数人员发布信息,大众接收信息。资讯类,主要是静态的网页,推送信息的,没有与用户的互动

    web2.0:rss订阅。用户和服务器有互动。

    客户端与服务器的交互模式:

    b/s结构,服务方式。   

    c/s方式:

    四、集群与分布式的区别

    集群:复制模式,每台机器做一样的事情。

    分布式:两台机器分工合作,每台机器做的事情不一样。 业务流:A-->B--->C

    五、浏览器请求服务器的过程

    1、先请求DNS解析域名得到ip,再通过ip请求目标服务器。

    例如:

    更改本地host:-------》达到更改目标机器:欺骗浏览器,让以为我指定机器是DNS机器

    自己做试验:

    HOTS: 127.0.0.1  www.baidu.com

    2、浏览器渲染出一个页面的过程:

    浏览器----》解析本地html文件

    解析服务器返回的网站内容。

    对浏览器解析渲染页面来,上述两种方式得到的结果,是没有区别的。

    六、网站开发的模式变迁

    1、数据库开发网站:

       数据库表user   -----》 html模板里。

    jsp开发:页面级/request/session/全局。  -------》 jsp页面  ${name}

    2、数据库的操作,主要:增删改查。

    主要压力来自查询:多个表联合,数据量膨胀。

    如:  select * from A,B.

      A表           B表

       1                                 4

           2                                 5

           2                                 6

    上述的一条sql,其结果是A/B两表记录的笛卡尔乘积。

    此时,A表若新增一条数据,整体查询计算量是几何级上升的:查询量 = A 表量 * B表量

    3、 服务器的集群拓展

    如果商品服务抗不住,----》集群解决:把整个服务复制一份。

    七、java项目的分布式的拓展方案:

    1、早期是一个war包,现在把service层压力大的service独立成单独出来,成为独立服务部署(jar包启动)

    2、单独出来的服务,可以以集群模式复制拓展,这样的复制性价比较高。

    3、大量的服务被独立出来后,这些独立的服务,就成为一个服务层网络。

    八、微服务模式的拓展:

    1、早期是一个war包,现把商品服务的control和service和dao全拆出,独立为一个服务。商品表也从数据库独立出来,成为一个独立商品数据库。

    2、此时的商品服务,能够直接接收http请求,为前台服务。这样的一个完整服务,称之为微服务。

    3、微服务易于上架下架,而不与其它模块逻辑迁连。

    九、服务治理:

    1、无论是分布式拆分,还是微服务拆分,最后形成的服务层应用,都需要相互之间调用。

    2、这种服务间调用是跨系统的。跨系统调用rpc有很多协议: RMI,webservice,http请求,网络达到服务间访问。

    dubbo:很多,dubbo协议

    springcloud:使用http协议通信

    3、服务集群,有负载路由。需要服务发现--zookeeper。

    4、数据积累大:订单服务---积累。

    -------分库/分表  -----需要修改业务sql语句。(有侵入性)-----------》mycat中间件

    +   /分区。   -------》对sql语是没有侵入性。------------》对库没办法减压。

    十、架构一个系统依据:

    1、系统目标是并发数(tps)多少:tomcat的安全连接数在500tps上下

    2、系统要承受的数据量级:mysql --- 单表到达 700W,性能会急剧下降。

    3、并发数(tps) transation per seconds:每秒钟的访问---每秒处理事务数

    十一、前端发展:

    1、一个url   ----------------  一个html页面  ---------》点击按钮跳转 --------》页面跳转。

    2、页面,ajax方式刷新页面。

    3、mvvm的开发流程

    a、前端人员开发的程序包放在静态服务器里

    b、浏览器访问静态服务器,得到前端html

    c、html页面发起ajax请求到后台服务器,得到业务数据,渲染出页面。

    十二、全网站搜索:

    不指定业务表的搜索,任何一个中数据 like 匹配。

    es/solr搜索中间件。

    十三、架构方案:

    1、首先考虑缓存方案解决性能问题

    2、集群模式------比较重的模式:浪费成本

    3、用分布式

    十四、缓存解决方案

    a、缓存服务器:redis、memcache,可以查询一下他俩的区别

    十四、集群引起的负载问题方案,如何session共享:

    1、tomcat自己插件,能够session共享

    2、spring-session插件,实现session共享。

    十五、空间换时间的方案

    有一个模式:jdk有一个future模式,自带高并发的轮询模式。

    十六、大数据量的切片方案

    数据分片:数据的路由保持不变

    1、设置数据片数量,比如100个柱

    2、当前库,均分这100个柱

    3、当加库扩容时,这100个柱动态迁移

    100万的用户,

    张三,数据查询时,------redis集群,----此时路由层知道张三的数据存在哪个柱上。

    ----- 数据和柱的对应关系,扩容时,此关系不变

    1、微服务里的数据库,是私有库,对外不开放的。

    2、微服务与分布式,是相辅相成的,不互拆。相互之间rpc调用,是无障碍的。

  • 相关阅读:
    sass环境搭建之node-sass,ruby
    对于模块加载:ES6、CommonJS、AMD、CMD的区别
    sass变量的作用域
    sass中的占位符%,@extend,@mixin(@include)的编译区别和使用场景
    遇到的问题
    全局配置
    组件或者dom的特殊属性
    全局API
    CentO7安装zookeeper并设置开机自启动
    MyBatis中TypeHandler的使用
  • 原文地址:https://www.cnblogs.com/ZenoLiang/p/10726702.html
Copyright © 2011-2022 走看看