Web设计
架构:配置中心(数据发布与订阅),配置共享,服务发现,微服务鉴权,网关,负载均衡,
设计:分布式锁,延时队列
业务:日志、链路跟踪,灰度,
日志:(面向领域、业务、基础架构)
通信协议:http(1.1, 2.0), ssl, websocket, probuf,
链路跟踪:(面向领域、业务、基础架构)
延时队列:
Redis:zset + 轮询
Netty:时间轮
RabbitMq
kafka:时间轮
Java DelayQueue
接口开发:
线下分配appid和appsecret,针对不同的调用方分配不同的appid和appsecret
防止盗链:加入时间戳
nonce(临时流水号):防止重复提交
签名signature字段生成规则:
请求头=“appId=xxxx&nonce=xxxx×tamp=xxxx”
sign = MD5(请求头 + 请求URL地址 + 请求Request参数 + 请求Body + appSecret)
微服务鉴权:
https://mp.weixin.qq.com/s/KLaUqQUFCF9TgMh-IHvedg
负载均衡:
不同机房:智能dns,httpdns
distributed database sharding:
hash slots locationg method:
1.client存储哈希槽与节点的映射信息:
1)固化存储;
2)第一次访问节点获取然后缓存下来(Redis);映射改变需要重定向。
2.proxy,统一代理节点。
3、every node is proxy。
分布式锁:
互斥
避免死锁:需要ttl,更严格需要自增id阻断冲突请求
容错:自身容错(zk,etcd),多个服务获取多个锁(Redlock)
可重入
自旋:MySQL,Redis
监听(自带排队功能):zk,etcd
性能:单点Redis > etcd > Zookeeper > MySQL
Redis:
单点:set nx
Redlock:多个服务依次获取锁,超过一半成功,否则释放。
Zookeeper:
持久节点前缀,临时节点序列号自增,后一个监听前一个节点,避免惊群。
etcd:
互斥:etcd 支持事务,通过事务创建 key 和检查 key 是否存在,可以保证互斥性;
容错:etcd 基于 Raft 共识算法,写 key 成功至少需要超过半数节点确认,这就保证了容错性;
死锁:etcd 支持租约(Lease)机制,可以对 key 设置租约存活时间(TTL),到期后该 key 将失效删除,避免死锁;etc 也支持租约续期,如果客户端还未处理完可以继续续约;同时 etcd 也有自增 id,在下文介绍。
实现:
Revision 机制。一个全局序列号,跟 ZooKeeper 的序列号类似,可以用来避免 watch 惊群;
Prefix 机制。即上述代码中 etcd 会创建一个前缀为 /my-lock/ 的 key(/my-lock/ + LeaseID),分布式锁由该前缀下 revision 最小(最早创建)的 key 获得;
Watch 机制。跟 ZooKeeper 一样,客户端会监听 revision 比自己小的 key,当比自己小的 key 释放锁后,尝试去获得锁。
本质上 etcd 和 ZooKeeper 对分布式锁的实现是类似的。
1、缓存穿透:缓存中不存在并且在数据库中也不存在。
布隆过滤器:过滤数据库
返回空对象
2、缓存击穿:热点key过期,大量线程访问数据库。
互斥锁:第一个发现CacheMiss的线程加锁,再从数据库更新到缓存,其他线程阻塞再读缓存。
永不过期
定期更新:即将过期,从数据库更新,延迟过期时间。
3、缓存雪崩:批量同时过期,缓存宕机
均匀过期
加互斥锁
永不过期
定期更新
双层缓存策略
Rest和rpc比较
rest的服务器客户端没依赖,耦合性低
rpc原理:
一个连接,使用channel调用服务
gRpc:
http2.0
序列化:probuf
没有服务治理和注册中心
Dubbo的工作原理:
第一层: service层,接口层,给服务提供者和消费者来实现的
第二层: config层,配置层,主要是对Dubbo进行各种配置的
第三层: proxy层,服务代理层,透明生成客户端的stub和服务单的skeleton
第四层: registry层,服务注册层,负责服务的注册与发现
第五层: cluster层,集群层,封装多个服务提供者的路由以及负载均衡,将多个实例整成一个服务
第六层: monitor层,监控层,对rpc接口的调用次数和调用时间进行监控
第七层: protocol层,远程调用层,封装rpc调用
第八层: exchange层,信息交换层,封装请求响应模式,同步转异步
第九层: transport层,网络传输层,抽象mina和netty为统一接口
第十层: serialize层,数据序列化层
默认使用Dubbo协议:
连接个数:单连接
连接方式:长连接,心跳时间heartbeat默认是1s
传输协议:TCP
传输方式:NIO异步传输
序列化:Hession二进制序列化
适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要使用Dubbo协议传输大文件或超大字符串
使用场景:常规远程服务方法调用
多线程:使用唯一ID区分
consumer和provider都异步的通知监控中心
dubbo默认传输大小:8Mb
Dubbo的安全性如何得到保障
(1). 在有注册中心的情况下,可以通过dubbo admin中的路由规则,来指定固定ip的消费方来访问。
(2). 在直连的情况下,通过在服务的提供方设置密码(令牌)token,消费方需要在消费时也输入这个密码,才能够正确调用。
(3). Dubbo添加服务ip白名单,防止不法调用。
Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 `check="true"。
但是,有的时候,我们并不是都需要启动时就检查的,比如测试的时候,我们是需要更快速的启动,所以,这种场景的时候,我们是需要关闭这个功能的。
负载均衡策略
Random LoadBalance 随机,按权重设置随机概率(默认)
RoundRobin LoadBalance 轮询,按公约后的权重设置轮询比率
LeastActive LoadBalance 最少活跃调用数,相同活跃数的随机
ConsistentHash LoadBalaclava 一致性Hash,相同参数的请求总是发到同一提供者
集群容错方案
Failover Cluster 失败自动切换,自动重试其他服务器(默认)
Failfast Cluster 快速失败,立即报错,只发起一次调用
Failsafe Cluster 失败安全,出现异常时,直接忽略
Failback Cluster 失败自动恢复,记录失败请求,定时重发
Forking Cluster 并行调用多个服务器,只要一个成功即返回
Broadcast Cluster 广播逐个调用所有提供者,任意一个报错则报错
Dubbo 有四种注册中心的实现,分别是 ZooKeeper,Redis,Simple 和 Multicast。
在禁用 cookie 的情况下,可以继续使用session:
1、通过url重写,把 sessionid 作为参数追加的原 url 中,后续的浏览器与服务器交互中携带 sessionid 参数。
2、服务器的返回数据中包含 sessionid,浏览器发送请求时,携带 sessionid 参数。
3、通过 Http 协议其他 header 字段,服务器每次返回时设置该 header 字段信息,浏览器中 js 读取该 header 字段,请求服务器时,js设置携带该 header 字段。
Web设计的更多相关文章
- 响应式WEB设计的9项基本原则
响 应式Web设计对于解决多类型屏幕问题来说是个不错方案,但从印刷的角度来看,其却存在着很多的困难.没有固定的页面尺寸.没有毫米或英寸,没有任何物理 限制,让人感到无从下手.随着建立网站可用的各种小工 ...
- 外媒速递:十大最佳心理学概念助你提升Web设计效果
外媒速递是核子可乐精选的近日国外媒体的精彩文章推荐,希望大家喜欢! 本期给大家推荐的是帮助你提升Web设计效果的十大最佳心理学概念.改善企业云环境协作效率的九款卓越工具.选择移动应用开发工具时要考虑的 ...
- 最佳的 14 个免费的响应式 Web 设计测试工具
一旦你决定要搭建一个网站就应该已经制定了设计标准.你认为下一步该做什么呢?测试!我使用“测试”这个词来检测你网站对不同屏幕和浏览器尺寸的响应情况.测试在响应式网页设计的过程中是很重要的一步.如果你明白 ...
- web设计中那些因素可能影响网站后期优化
web设计中那些因素可能影响网站后期优化. 1.网站代码的简洁实用性.网站源文件html代码.js代码.css代码等应尽可能的压缩处理.能用jquery-min.js的最好不要用jquery.js:c ...
- <HTML5和CSS3响应式WEB设计指南>译者序
"不是我不明白,这世界变化快."崔健的这首歌使用在互联网领域最合适不过.只短短数年的功夫,互联网的浪潮还没过去,移动互联网的时代已经来临.人们已经习惯将越来越多的时间花在各种移动设 ...
- 如何通过CSS3 实现响应式Web设计
如何通过CSS3 实现响应式Web设计: 分为三个步骤:(1)允许网页宽度自动调整.首先在页面头部中,我们需要加入这样一行:<meta name="viewport" con ...
- [转]响应式WEB设计学习(3)—如何改善移动设备网页的性能
原文地址:http://www.jb51.net/web/70362.html 前言 移动设备由于受到带宽.处理器运算速度的限制,因而对网页的性能有更高的要求.究竟是网页中的何种元素拉低了网页在移动设 ...
- [转]响应式WEB设计学习(2)—视频能够做成响应式吗
原文地址:http://www.jb51.net/web/70361.html 上集回顾: 昨天讲了页面如何根据不同的设备尺寸做出响应.主要是利用了@media命令以及尺寸百分比化这两招. 上集补充: ...
- [转]响应式WEB设计学习(1)—判断屏幕尺寸及百分比的使用
原文地址:http://www.jb51.net/web/70360.html 现在移动设备越来越普及,用户使用智能手机.pad上网页越来越普遍.但是传统的fix型的页面在移动终端上无法很好的显示.因 ...
- css014 响应式web设计
css014 响应式web设计 一. 响应式web设计基础知识 1.rwd的三大理念:a.用于布局的弹性网络, b.用于图片和视频的弹性媒体,c.为不同屏幕宽度创建的不同样式的css媒体查询. ...
随机推荐
- solr - 安装ik中文分词 和初始化富文本检索
1.下载安装包 https://repo1.maven.org/maven2/org/apache/solr/solr-dataimporthandler/7.4.0/solr-dataimporth ...
- vim 安装使用 pathogen
目录 pathogen 是什么? 如何安装? pathogen 是什么? pathogen 一般作为 vim 新手的第一个插件,用来统一管理 vim 插件包. (官方解释)非常容易地管理你的 'run ...
- ubuntu 18.04 检测到系统程序出现问题
检测到系统程序出现问题,想立即报告这个问题吗? 可以暂时先把这个提示关闭掉 $ sudo vi /etc/default/apport 找到第4行 修改为 enabled=0 保存退出 附linux中 ...
- Python面向对象时最常见的3类方法
为了节省读友的时间,先上结论(对于过程和细节感兴趣的读友可以继续往下阅读,一探究竟): [结论] 类中定义的方法类型 关键词 本质含义 如何定义 如何调用 使用场景举例 实例方法 一般无任何修饰时,默 ...
- doT.js模板用法
前提:引入doT.min.js: <script type="text/javascript" src="js/jquery.js"></sc ...
- BugKu CTF(杂项篇MISC)-贝斯手
打开是以下内容 先看一下给了哪些提示 1.介绍 没了?不,拉到最底下还有 2.女神剧照 密码我4不会告诉你的,除非你知道我的女神是哪一年出生的(细品) 大致已经明白了,四位数密码,出生年份 文件是以下 ...
- Python常用的数据结构
一.list 列表 1.列表的特点 有序的,元素可以重复,列表中的元素可以进行增上改查,可以存放不同的数据类型 2.创建列表 中括号创建并填充 --->[] 通过构造函数创建 list() 列表 ...
- elasticsearch拼写纠错之Term Suggester
一.什么是拼写纠错 拼写纠错就是搜索引擎可以智能的感知用户输入关键字的错误,并使用纠正过的关键字进行搜索展示给用户:拼写纠错是一种改善用户体验的功能: elasticsearch提供了以下不同类型的s ...
- linux 安装 Logtash 同步mysql数据到Elasticsearch
官网下载Logtash 离线安装包 下载地址 https://www.elastic.co/cn/downloads/logstash 需要注意版本与es 对应 新建配置文件 新建文件夹 mkdir ...
- JQ的使用
1.hello,word <script type="text/javascript" src="js/jquery-1.10.1.js">< ...