《大型网站系统与Java中间件》读书笔记 (中)

news/2024/5/19 21:35:46/文章来源:https://blog.csdn.net/Java_3y/article/details/94411508

前言

只有光头才能变强。

文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y

回顾上一篇:

  • 《大型网站系统与Java中间件》读书笔记(一)

这周周末读了第四章,现在过来做做笔记,希望能帮助到大家。

注:在看这篇文章之前,强烈建议先看看我之前写过的一篇SpringCloud入门文章:外行人都能看懂的SpringCloud,错过了血亏!。看完再回头看这篇文章,你会发现:这本书讲的设计与实现在SpringCloud中几乎都有对应的组件支持。

一、服务框架的设计

从上一篇我们讲到,应用拆开了以后,不同功能/模块之间的调用不再单纯通过本机调用,引入了远程的服务调用

服务拆分

而远程的服务调用这个东东会很难吗?说白了,不就是两台服务器之间通信吗?

远程的服务调用

这时候,你能想到什么?必定是Socket吧。没错,我们通过Socket肯定是可以完成两个系统之间的通信的问题的。(Socket相信大家在学习基础的时候已经写过Demo了,这我就不多BB了)

Socket完成系统之间的通信

一两个系统的Socket写起来没啥,但我们应用拆分之后,系统可是会变得很多很多。

系统会变得非常多

系统很多的情况下,我们在写远程调用代码的时候就可能要考虑到以下的问题:

  1. 我们肯定是不希望每次远程调用的时候都贴上重复的Socket代码,要是调用远程方法像调用本地方法一样简单就好了。
  2. 某个服务应用为了实现高可用,集群了(多台机器部署同一套应用)。那我远程调用的时候选择哪一台机器进行调用?
  3. 网络之间的传输协议用现成的HTTP呢?还是自定义一套通信协议呢?
  4. 因为我们想调用远程方法像调用本地方法一样,那么在网络上就需要传输Java对象,要传输Java对象,就必须得对其进行序列化和反序列化的处理。能实现序列化的操作也有很多,选择哪一种方式呢?
  5. 网络之间的通讯也有bio、nio、以及aio这几种模式,一般来说我们会选择哪种比较多?如果不了解nio的同学,可以阅读我以前写过的笔记(nio你了解多少?)
  6. ….等等等

由于系统之间的调用会非常多,我们自然是不希望写重复的代码的,所以服务框架(也可以说是RPC框架)就应运而生了【说白了就是专门处理远程服务调用的框架】。有了服务框架,我们就可以实现多个系统之间以统一的方式来进行远程调用了。

  • 推荐阅读:RPC太太太太太太太容易理解啦!

一个服务框架需要考虑的问题其实远不止上面所列出的那些,比如说:

  • 服务框架与Web应用和Web容器的关系是什么?服务框架和应用是绑定在一起吗?(服务框架作为Web应用的一个依赖包),还是说服务框架只是Web应用的一个扩展(没有和Web应用打包绑定在一起)
  • 服务框架的jar包和Web应用的jar包冲突了怎么办?
  • 为了保证系统的稳定性,流量控制也应该要考虑到
  • 在远程调用的时候,需不需要以更细粒度的方式来进行选择(之前说的是选择哪台机器,但可以细粒度到机器下的接口或者方法)
  • …等等

二、服务框架的技术实现思路

在书中给出了设计服务框架时需要考虑的问题的同时也给出了一些实现思路,我摘录一些我觉得比较有参考意义的说说。

2.1 像本地一样调用远程服务

比如服务消费方在执行orderService.buy("HHKB键盘")时,实质上调用的是远端的服务

这用到啥技术?明显就是动态代理(给女朋友讲解什么是代理模式)

在实现的时候有三个基础属性可以参考一下:

  • interfaceName— 确定调用的是哪一个接口
  • version— 如果接口进行升级了,可以使用version来进行区分和隔离
  • group— 对远程服务的机器进行分组,那么调用的时候就可以选择不同的分组来调用(调用者对统一服务的调用进行隔离)

2.2 其他

  1. 当远程调用服务的时候,不需要每次都要去注册中心查找可用的地址,而是把地址缓存在调用方。当服务有变化的时候,主动告诉调用者就行了。
  2. 流量控制一般会基于两个维度去考虑:一、自身的接口和方法。二、请求的来源
  3. 并不是所有的请求都要经过服务提供者。像走缓存这样频繁的操作(而且大多数都是会成功的),直接在调用方调用就ok了

直接在调用方走缓存

最后

总的来说,书的第四章主要是在讲解在设计服务框架的时候应该要考虑到哪些方面,可以以什么方案来解决,看得还是非常过瘾的(这只是我的个人笔记,书上还有很多的内容)。强烈建议配合我之前写过的一篇SpringCloud入门文章:外行人都能看懂的SpringCloud,错过了血亏!食用。

乐于输出干货的Java技术公众号:Java3y。公众号内有200多篇原创技术文章、海量视频资源、精美脑图,关注即可获取!

转发到朋友圈是对我最大的支持!

觉得我的文章写得不错,点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_725912.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

几个简单步骤可以提高网站浏览体验

摘要: STEP 1确定网站定位 你的网站定位是要以企业形象官网为主,或是以单纯贩售商品的购物网站,还是要跟使用者做互动活动的网站? 每个网站的目的都不尽相同,形象官网,可能需要着重于品牌理念、品牌故事、…

一次面试引发的思考(中小型网站优化思考)

前言 故事的起因是这样的,由于本人地处偏僻工作地点在美丽的冰城哈尔滨虽然地方很美丽,但是这里的软件行业实在是算不上“美丽”,这么多年由于个人原因或者公司原因经常换工作,因为这里都是中小型公司,没有什么大公司。…

我采访了同事,让他掏出了每天都会浏览的干货网站...这几个网站也太牛了吧!

前言 在周六的晚上,我日常去到公司写文章。想写一篇程序员常浏览的网站,刚好同事在我后面看我在干什么。于是我就对他进行了采访,问了一下他常去的网站有哪些。 这次我采访的是鸡蛋,他跟我一样大,但是技术比我优秀实在…

Django项目实践4 - Django网站管理(后台管理员)

http://blog.csdn.net/pipisorry/article/details/45079751 上篇:Django项目实践3 - Django模型 Introduction 对于某一类站点, 管理界面 是基础设施中很重要的一部分。这是以网页和有限的可信任管理者为基础的界面,它能够让你加入&#xff0…

亿级流量网站构架核心技术

高并发原则无状态拆分系统维度:根据系统功能/业务进行拆分功能维度:对一个系统进行功能再拆分读写维度:根据读写比例进行拆分AOP维度:根据访问特征模块维度:比如按照基础或代码维护特征进行拆分服务化:进程…

Python教程 - 廖雪峰的官方网站

2019独角兽企业重金招聘Python工程师标准>>> https://www.liaoxuefeng.com/ 转载于:https://my.oschina.net/u/3563297/blog/1622686

这也许是破解所有网站

您还担心各种资源获取不到吗?这里聚集了广大网友的智慧结晶所在! 现在的技术真的是越来厉害了,而且相比于以往复杂的操作 现在的黑科技仿佛特别“亲民” 比如 我之前发过在“baidu”后面加“wp” 就能高速下载百度云资源 而且自己不需要…

thinkphp5项目--企业单车网站(五)

thinkphp5项目--企业单车网站(五) 项目地址 fry404006308/BicycleEnterpriseWebsite: Bicycle Enterprise Websitehttps://github.com/fry404006308/BicycleEnterpriseWebsite 一、BeyondAdmin使用 1、里面的功能真的超级全,连编辑器都有&…

使用Nginx实现多台服务器网站负载均衡的配置方法介绍

使用Nginx实现网站负载均衡的配置方法介绍1.准备工作1.1 Linux系统安装Nginx1.2 准备三台服务器1.3配置主服务器nginx访问路径1.4访问主服务器2.Nginx负载均衡的几种不同方式介绍2.1 轮询2.2 权重2.3 iphash2.4 最少连接2.5 fair服务器的响应时间来分配3.Nginx配置1.准备工作 …

Laravel访问网站页面空白

配置好了Laravel之后进行网站访问,发现是空白页面,第一次使用Laravel很迷茫。使用fiddler查看的时候出现500错误,网上查了下是因为根目录下的storage目录没有777权限,如图: 解决方法:使用chmod -R 777 s…

访问网站的时候出现Discuz! Database Error (2002) notconnect错误

自己用dz做的网站一直好好的,今天访问的时候出现了:Discuz! Database Error (2002) notconnect错误,如图: 解决方法: 修改/config/config_global.php中的config[‘db′][‘1′][‘dbhost′]‘localhost′;改为&…

知乎有哪些适合大学生浏览的网站?

2019独角兽企业重金招聘Python工程师标准>>> 作者:Adam 链接:https://www.zhihu.com/question/20136746/answer/299592153 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 公开课 …

SEO新站与老站,如何解决网站降权问题?

针对网站降权的问题,百度与谷歌的评定标准基本相同,都是完全基于搜索引擎的用户体验,进行基础性的判断。简单理解:网站被降权,实际上是被搜索引擎降低信任评级的一个过程,那么你一定触碰了相关算法的识别机…

SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎 .

IDE使用的MyEclipse6.5,数据库使用MySQL 5.0.37 , 另装了Navicat for MySQL , jdk版本是6.0 工程做完的效果图如下,com.zly.indexManager中两个类,分别创建索引和搜索索引, com.zly.test.entity中是使用的实体类,分别是…

微软正式发布Azure Storage上的静态网站

微软正式宣布了Azure Storage上的静态网站,提供了从托管在Azure Storage上的HTML、CSS和JavaScript文件提供内容的能力。静态网站包含内容固定的Web页面,同时仍然允许利用JavaScript等客户端代码来创建丰富的用户体验。 有了这个新功能,继用于…

收藏了很久的:5款电影网站!高清大片任意看!就没有找不到资源!

一放假就剧荒?没有时间去电影院看?那这5款电影网站你很需要!Top1:中国高清网各种大片任意看!最新上映还是好莱坞大片,想看什么就看什么!还怕剧荒?Top2:BT天堂热门综艺总是…

Wordpress 插件出现漏洞,网站可能被攻击者接管

百度智能云 云生态狂欢季 热门云产品1折起>>> 据安全研究人员警告,因旧版 Wordpress Simple Social Button 插件出现漏洞,使用这个插件的网站应该尽快更新软件,避免攻击者攻击并接管网站。Simple Social Button 是由 WPBrigade 公…

前嗅ForeSpider教程:网站登录配置

当我们在采集中碰到:所采集的网站数据需要登录,才可以看到所需信息时,则需要在软件中模拟登陆环境,采集数据,此时需要配置登录信息。今天小编就教大家:如何进行网站登录配置,具体步骤如下&#…

大型网站技术架构(二)架构模式

2019独角兽企业重金招聘Python工程师标准>>> 每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作。 所谓网站架构模式即为了解决大型网站面临的高并发访问、海量数据、高可靠…

自己的网站实现windows live writer离线写博客

昨天在博客园看到可以用windows live writer离线来写博客,OMG!感觉微软真的太牛逼啦!偶孤陋寡闻,现在才知道有这么个好东东,那就赶紧在偶的网站上也实现一下吧 ps:偶的网站www.bantool.cn 额,感觉不错~呵呵…