Sentinel的知识
一 Sentinel的知识
1.雪崩问题
微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩。
解决方式:
超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待
舱壁模式:限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离
熔断降级:由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求
流量控制:限制业务访问的QPS,避免服务因流量的突增而故障
2.服务保护技术对比
Sentinel
Hystrix
隔离策略
信号量隔离
线程池隔离/信号量隔离
熔断降级策略
基于慢调用比例或异常比例
基于失败比率
实时指标实现
滑动窗口
滑动窗口(基于RxJava)
规则配置
支持多种数据源
支持多种数据源
扩展性
多个扩展点
插件的形式
基于注解的支持
支持
支持
限流
基于QPS,支持基于调用关系的限流
有限的支持
流量整形
支持慢启动、匀速排队模式
不支持
系统自适应保护
支持
不支持
控制台
开箱即用,可配置规则、查看秒级监控 ...
ES高级应用
一 数据聚合
1. 聚合的种类
聚合(aggregations)可以实现对文档数据的统计、分析、运算。聚合常见的有三类:
桶(Bucket)集合:用来对文档做分组
TermAggregation:按照文档字段值分组
Date Histogram:按照日期阶梯分组,例如一周一组,一月一组
度量(Metric)聚合:用以计算一些值,比如:最大值、最小值、平均值等
Avg:求平均值
Max:求最大值
Min:求最小值
Stats:同时求max、min、avg、sum等
管道( pipeline)聚合:其它聚合的结果为基础做聚合
2. DSL实现聚合
DSL实现Bucket聚合
现在,我们要统计所有数据中的酒店品牌有几种,此时可以根据酒店品牌的名称做聚合。
123456789101112GET /hotel/_search{ "size": 0, # 设置size为0,结果中不包含文档,只包含聚合结果 "aggs": { # 定义聚合 "brandAgg": { # 聚合起个名字 ...
DSL查询文档
一 DSL查询分类及基本语法
1.DSL Query的分类
Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括:
查询所有:查询出所有数据,一般测试试用。例如:match_all
全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如
match_query
multi_match_query
精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:
ids
range
term
地理(geo)查询:根据经纬度查询。例如:
geo_distance
geo_bounding_box
复合(compound)查询:复合查询可以将上述各种查询条件组合起来,合并查询条件。例如:
bool
function_score
2.查询所有
查询的基本语法如下:
12345678910111213141516GET /indexName/_search{ "query": ...
elasticsearch基础操作
一 初识elasticsearch
1.什么是elasticsearch?
elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。
elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域。
elasticsearch是elastic stack(ELK)的核心,负责存储、搜索分析数据。
2.elasticsearch的发展
Lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting于1999年研发。
官网地址:https://lucene.apache.org/
Lucene的优势:
易拓展
高性能(基于倒排索引)
Lucene的缺点:
只限于Java语言开发
学习曲线陡峭
不支持水平拓展
2004年Shay Banon基于Lucene开发了Compass
2010年Shay Banon重写了Compass,取名为Elasticsearch。官网地址: https://www.elast ...
RabbitMQ基础操作
一 同步通信
1.同步通信的问题
微服务间基于Feign的调用就属于同步方式,存在一些问题
耦合度高:每次加入新的需求,都需要修改原来党的代码
性能下降:调用者需要等待服务提供者响应,如果调用链过长则响应时间等于每次调用的时间之和
资源浪费:调用链中的每个服务在等待响应的过程中,不能释放请求占用的资源,高并发场景下会极度浪费资源
级联失败:如果服务提供者出现问题,所有调用方法都会跟着出问题,如同多米诺骨牌一样,迅速导致整个微服务群故障
2.同步调用的优点
时效性强,可以立即得到结果
二 异步调用
异步调用常见实现就是事件驱动模式
1.异步通信的优点
服务解耦
性能提升,吞吐量提高
服务没有强依赖,不担心级联失败问题
流量削峰
2.异步通信的缺点
依赖于Broker的可靠性、安全性、吞吐能力
架构复杂了,业务没有明显的流程线,不好追踪管理
三 RabbitMQ 快速入门
1.什么是MQ?
MQ(MessageQueue)中文是消息队列,字面看来就是存放消息的队列。也就是事件驱动架构中的Broker。
属性
RabbitMQ
ActiveMQ
RocketMQ
K ...
Docker使用基础
一 项目部署的问题
大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题:
依赖关系复杂,容易出现兼容性问题
开发、测试、生产环境有差异
简单来说:Docker是一个快速交付应用、运行应用的技术
可以将程序及依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统
运行时利用沙箱机制形成隔离容器,各个应用互不干扰
启动、移除都可以通过一行命令完成,方便快捷
二 什么是Docker?
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。(From 百度百科)
三 Docker如何解决依赖兼容性问题?
将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包
将每个应用放到一个隔离容器去运行,避免相互干扰
四 Docker如何解决不同系统环境的问题?
Docker将用户程序与所需要调用的系统(比如Ubuntu)函数库一起打包
Docker运行到不同操作系统时,直接基于打包的函 ...
每日编程(20220607)
最长公共前缀II
题目: 已知某二叉树的先序序列和中序序列,编程计算并输出该二叉树的后序序列。
输入格式:
1字符串数组
输出格式:
1前缀字符串
输入样例:
1["flower","flow","flight"]
输出样例:
1"fl"
思路:
用一个变量来保存最长的前缀,将第一个数组字符串作为基串,逐个匹配后面元素的字符串。
代码:
12345678910111213141516171819202122232425262728293031323334353637383940414243#include <bits/stdc++.h> using namespace std;class Solution{ public: string longestCommonPrefix(vector<string> &strs){ if(strs.empty() || strs.size() == 0) return &qu ...
每日编程(20220602)
盛最多水的容器 I
题目: 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器,且 n 的值至少为 2。
输入格式:
1由方括号包裹以逗号分隔的整型数组
输出格式:
1整型数字
输入样例:
1[1,8,6,2,5,4,8,3,7]
输出样例:
149
思路:
双重循环暴力破解
代码:
1234567891011121314151617181920212223242526272829303132#include <bits/stdc++.h>using namespace std;int main(void) { char s; int res = 0; vector<int> nums; // 解析输入的字符串 while(cin >> s) { if( ...
百度面试总结
和CSS相关求字体的大小 主要问css的权重
12345678910111213141516171819202122232425262728<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> #a { font-size: 12px; } /* ...这里还有一部分,具体的记不清楚了,和c没关 */ div.c { ...
防抖和节流
函数节流(throttle)
节流: 让函数有节制地执行,而不是毫无节制的触发一次就执行一次。什么叫有节制呢?就是在一段时间内,只执行一次
代码:
123456789101112131415161718192021/** * 节流函数 * @param {Function} fun 需要节流的函数 * @param {Number} delay 间隔触发的时间 * @returns */ function throttle(fun, delay) { let flag = true, timer = null return function (...args) { let context = this if (!flag) { return } flag = false clearTimeout(timer) timer = setTimeout(() => { fun.apply(context, args) fla ...





