首页 文章 精选 留言 我的

精选列表

搜索[栈],共10000篇文章
优秀的个人博客,低调大师

Java + Python:混合技术的专业实践与代码实现

Java 与 Python 是两种在企业级系统中长期共存的语言:Java 以强类型、JVM 生态、高并发与企业级中间件见长;Python 以生态丰富、开发效率高、AI 与数据能力强大著称。在现代系统中,二者不是替代关系,而是分工关系:Java 承担交易、订单、风控、网关与企业级服务;Python 承担模型推理、数据分析、算法策略与科学计算。本文从互操作方式、架构设计、性能权衡、代码实战、部署与安全等角度,给出一套可落地的 Java + Python 混合开发方法,并附带可直接运行的 Java 与 Python 代码。

优秀的个人博客,低调大师

Go + Python:混合技术的专业实践与代码实现

Go 与 Python 是两种哲学迥异的语言:Go 追求简洁、并发、静态编译与部署效率;Python 追求表达力、生态丰富与快速迭代。在现代后端与 AI 系统中,二者并非竞争关系,而是天然互补。Go 适合构建高并发网关、编排层、基础设施与数据面;Python 适合模型推理、数据分析、算法策略与科学计算。本文从专业视角系统论述 Go + Python 混合架构的设计原则、互操作模式、性能权衡、部署与安全,并给出可直接运行的代码示例,涵盖 HTTP、gRPC、子进程与 cgo 四种集成方式。

优秀的个人博客,低调大师

PackOne —— 大数据软件部署和管理工具

PackOne 致力于实现主流大数据软件在云端的快速弹性部署。通过对云 API 和 Apache Ambari API 的联合调用,完成 Hadoop、Spark、NiFi、PiFlow、Kylin、MongoDB、Neo4J 等流行的大数据管理/处理软件在云端的一键部署和一键伸缩。主要特性包括: 支持在空白虚拟机上完成大数据处理集群的全自动部署。 通过 Apache Ambari 对已部署的大数据软件进行状态监控、配置管理。 通过将模版集群物化为系统镜像,实现新集群的分钟级快速部署。 通过集群节点的全自动增删,实现各类大数据软件处理能力的分钟级弹性伸缩。 在同一个界面上对来自不同云的虚拟机、存储卷、镜像、模版等进行 CURD 操作。 PackOne 支持不同类型的云平台。目前版本实现了对 OpenStack 和 EVCloud 两款私有云的适配。 PackOne 可执行程序包的安装、配置、运行方式都比较简单: 一、安装 选择一台能够访问目标云的 Linux 主机 (以 Centos 7.5 为佳),依次执行: pip install pk1 pip install -U pip setuptools 二、配置 创建一个Postgresql数据库实例,并准备好其连接信息,包括:db_user(数据库用户)、db_passwd(用户密码)、db_host(数据库主机地址)、db_port(数据库端口号)、db_name(数据库名)。然后执行: pk1 setup --database db_user:db_passwd:db_host:db_port:db_name (会提示设置管理员 admin 的邮箱、密码等信息。) 三、运行 PackOne 服务 pk1 start [--listening 0:11001] 四、快速上手:以 OpenStack 私有云为例 访问网址:http://packone-server-ip:11001 进入添加“云”的界面,输入如下图格式所示的 OpenStack 用户密钥信息。创建成功会自动导入云端的镜像、模版。然后进入 user/profiles 界面,为当前用户添加一个 profile,进入 user/balances 界面,为该 profile 在新添加的云上添加余额(大于零即可)。 回到云列表界面,选择刚才新创建的云,在操作下拉框点选“bootstrap…”按钮,触发在空白虚拟机上全自动部署模版集群的后台工作流。通过 clouds/operations 界面可监控工作流的执行进度,若遇到某步操作出错,可以点按 re-run 按钮重新执行,直至成功。 当工作流执行完毕后,可以在 engines/clusters 界面选择刚才创建的名为 bootstrap.<云名称>的模版集群,点按“Materialize the cluster as a scale”将其镜像化。最后,创建新集群时,可在 engines/cluster 的创建集群界面选择名为“packone.<云名称>”的 scale,实现新集群的快速创建。 五、停止PackOne服务 pk1 stop PackOne 目前以 Apache License V2.0协议在 Gitee 上开源,欢迎提交 Issue、PR。

优秀的个人博客,低调大师

微服务技术:API网关中心,落地实现方案

本文源码:GitHub·点这里 || GitEE·点这里 一、服务网关简介 1、外观模式 客户端与各个业务子系统的通信必须通过一个统一的外观对象进行,外观模式提供一个高层次的接口,使得子系统更易于使用: 简单说一下外观模式,网关和这个模式很像,但是比外观模式复杂,模式,结构,原则这些都是通用的,在各种架构或组件中使用。 2、网关简介 微服务网关从感觉上,很像是:拦截器+路由+过滤器,拦截请求,系列基础处理,路由转发到指定服务。 服务网关在整个架构体系上也是一个服务器,作为请求的唯一入口,与外观模式十分类似,在网关层处理所有的非业务功能,为客户端提供定制的API,在网关层通常会执行如下操作:如权限校验、监控、负载均衡、缓存、日志、限流、等等。 二、网关模式 1、模式对比 这里对比常用的请求服务管理模式,和网关模式,如图: 常规模式 在没有网关的情况下,微服务架构会在业务层服务上提供一个API服务,用来接收参数,例如Client-API,通常会根据系统模块划分多个API,例如,运营系统,用户系统等。 请求统一进入Client-API服务 ; Client-API经过鉴权,限流,路由等操作; 如果请求通过,会转发到相应业务服务上; 如果请求被拦截,会直接返回给客户端; Client-API集成所有业务服务的开放接口; 该模式下的缺点非常明显,每个Client-API都需要实现一套非业务服务,代码冗余,当系统膨胀之后,维护成本极高,适用于轻量级系统架构。 网关模式 在业务服务层上,添加一层网关控制,在服务网关中可以完成一系列的横切非业务功能: 客户端请求在网关层做统一拦截; 网关上执行:路由/鉴权/限流/降级等操作; 网关判断是转发请求还是直接响应客户端; 网关服务层要执行很多非业务流程,作为系统的服务端唯一入口,承受所有服务的路由转发,安全,限流,缓存,日志,监控,熔断降级等功能,网关服务不仅要做到高可用,还要避免出现性能瓶颈。 2、多重网关 在大型复杂的系统中,通常会对网关做分层管理,把一类业务规划到一个网关下,避免网关过于臃肿,方便维护和管理: 总网关:通用常用来做路由转发功能; 模块网关:分类的业务服务聚合网关,对这类服务的做非业务性操作,最后请求转发到具体服务上,在数据类平台上,通常对数据通道(流入流出)做一层独立的服务网关;对数据分析类服务做一层独立网关;基本是根据服务的使用情况来划分,这样避免单层服务网关过于复杂的情况。 三、核心功能 1、配置层面 服务发现 网关应该有服务发现功能,通过统一注册中心,获取服务列表,这样才能执行统一代理服务和路由转发功能。 路由请求 植入网关层服务之后,客户端不知道自己请求的是哪个具体的服务,只需要把请求转发给网关,网关放行之后会把请求路由到指定业务服务上。 负载均衡 网关连接的服务实例可能是集群模式存在,所以网关还可以对各个服务实例上执行负载均衡策略,常见的策略就是服务轮询或者按权重路由。 2、定制开发 定制开发例如:权限校验,日志集成,接口限流,等相关功能,需要和数据库交互,可以做成独立服务,在服务中实现具体的处理逻辑,网关层直接调用即可。 四、网关组件 1、Netflix-Zuul Zuul网关主要提供动态路由,监控,弹性,安全管控等功能。在分布式的微服务系统中,系统被拆为了多个微服务模块,通过zuul网关对用户的请求进行路由,转发到具体的后微服务模块中,Netflix开源的一个基于JVM路由和服务端的负载均衡器。 2、Tyk组件 Tyk是一个开源的、轻量级的、快速可伸缩的API网关,支持配额和速度限制,支持认证和数据分析,支持多用户多组织。基于go语言编写,在Java架构系统中使用很少。 3、Kong组件 Kong是一款基于Nginx+Lua编写的高可用,可扩展的开源网关项目,由Mashape公司开放。核心是实现数据库抽象,路由和插件管理,插件可以存在于单独的代码库中,并且可以在几行代码中注入到请求生命周期的任何位置。提供易于使用的RESTfulAPI来操作和配置API管理,并且可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对高并发的网络请求。 五、源代码地址 GitHub·地址 https://github.com/cicadasmile/husky-spring-cloud GitEE·地址 https://gitee.com/cicadasmile/husky-spring-cloud

优秀的个人博客,低调大师

微服务技术:流量整形算法,服务熔断与降级

云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 一、流量控制 1、基本概念流量控制的核心作用是限制流出某一网络的某一连接的流量与突发,使这类报文以比较均匀的速度流动发送,达到保护系统相对稳定的目的。通常是将请求放入缓冲区或队列内,然后基于特定策略处理请求,匀速或者批量处理,该过程也称流量整形。 流量控制的核心算法有以下两种:漏桶算法和令牌桶算法。 2、漏桶算法 基础描述漏桶算法是流量整形或速率限制时经常使用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。 漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量。漏桶算法基本思路:请求(水流)先进入到容器(漏桶)里,漏桶以一定的速度出水,这里就是指流量流出的策略,当流量流入速度过大容器无法承接就会直接溢出,通过该过程限制数据的传输速率。 核心要素 通过上述流程,不难发现漏桶算法涉及下面几个要素: 容器容量 容器的大小直接决定能承接流量的多少,容器一但接近饱和,要么溢出,要么加快流速; 流出速度 流量流出的速度取决于服务的请求处理能力,接口支撑的并发越高,流速就可以越大; 时间控制 基于时间记录,判断流量流出速度,控制匀速模式。 注意:需要一个基本的判定策略,漏桶算法在系统能承接当前并发流量时,不需要启用。 3、令牌桶算法 基础描述令牌桶可自行以恒定的速率源源不断地产生令牌。如果令牌不被消耗,或者被消耗的速度小于产生的速度,令牌就会不断地增多,直到把桶填满。后面再产生的令牌就会从桶中溢出。 令牌桶算法虽然根本目的也是控制流量速度,但是当令牌桶内的令牌足够多时,则允许流量阶段性的并发。传送到令牌桶的数据包需要消耗令牌。不同大小的数据包,消耗的令牌数量不一样。核心要素令牌桶存放按照特定的速率生成的令牌,以此控制流量速度。匹配规则这里的匹配规则更多是服务于分布式系统,例如服务A是系统的核心交易,当出现并发时,基于令牌桶最匹配规则,只允许交易请求通过,例如:常见双十一期间,各大电商平台提示,为保证核心交易,边缘服务的数据延迟或暂停等。注意:令牌桶算法和漏桶算法的目的虽然相同,但是实现策略是相反的,不过都存在一个问题,为保证大部分请求流量成功,会牺牲小部分请求。二、限流组件1、Nginx代理组件Nginx反向代理实际运行方式是指以代理服务器来接收客户端连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给客户端,此时代理服务器对外就表现为一个服务器。流量限制是Nginx作为代理服务中一个非常实用的功能,通过配置方式来限制用户在给定时间内HTTP请求的数量,两个主要的配置指令limit_req_zone和limit_req,以此保护高并发下系统的稳定。2、CDN边缘节点CDN边缘节点,准确的说并不是用来处理流量限制的,而是存放静态页面。内容缓存为CDN网络节点,位于用户接入点,是面向最终用户的内容提供设备,可缓存静态Web内容和流媒体内容,实现内容的边缘传播和存储,以便用户的就近访问,这样避免用户大量刷新数据服务器,节省骨干网带宽,减少带宽需求量。在高并发场景下,尤其是倒计时抢购类似业务,在活动开始前后用户会产生大量刷新页面的操作,基于CDN节点,这些请求不会下沉到数据的服务接口上。也可以基于页面做一些请求拦截,比如点击页面单位时间内只放行一定量的请求,以此也可以实现一个限流控制。三、熔断器组件所谓熔断器机制,即类似电流的保险器,当然电压过高会自动跳闸,从而保护电路系统。微服务架构中服务保护也是这个策略,当服务被判断异常,会从服务列表断开,等待恢复在重新连接。服务熔断降级的策略实现有如下几个常用的组件。1、Hystrix组件基础简介Hystrix当前处于维护模式,即不再更新,作为SpringCloud微服务组件中,最原生的一个熔断组件,很多思路还是有必要了解一下。例如:服务熔断,阻止故障的连锁反应,快速失败并迅速恢复,服务降级等。某个微服务发生故障时,要快速切断服务,提示用户,后续请求,不调用该服务,直接返回,释放资源,这就是服务熔断。熔断器策略服务器高并发下,压力剧增的时候,根据当业务情况以及流量,对一些服务和页面有策略的降级(可以理解为关闭不必要的服务),以此缓解服务器资源的压力以保障核心任务的正常运行。熔断生效后,会在指定的时间后调用请求来测试依赖是否恢复,依赖的应用恢复后关闭熔断。基本流程:首先判断服务熔断器开关状态,服务如果未熔断则放行请求;如果服务处于熔断中则直接返回。每次调用都执行两个函数markSuccess(duration)和markFailure(duration) 来统计在一定的时间段内的调用是成功和失败次数。基于上述的成功和失败次数的计算策略,来判断是否应该打开熔断器,如果错误率高于一定的阈值,就会触发熔断机制。熔断器有一个生命周期,周期过后熔断器器进入半开状态,允许放行一个试探请求;否则,不允许放行。2、Sentinel组件基础简介基于微服务的模式,服务和服务之间的稳定性变得越来越重要。Sentinel以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。Sentinel可以针对不同的调用关系,以不同的运行指标(如QPS、并发调用数、系统负载等)为基准,收集资源的路径,并将这些资源的调用路径以树状结构存储起来,用于根据调用路径对资源进行流量控制。流量整形策略直接拒绝模式是默认的流量控制方式,即请求超出任意规则的阈值后,新的请求就会被立即拒绝。启动预热模式:当流量激增的时候,控制流量通过的速率,让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。匀速排队方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。熔断策略Sentinel本质上是基于熔断器模式,支持基于异常比率的熔断降级,在调用达到一定量级并且失败比率达到设定的阈值时自动进行熔断,此时所有对该资源的调用都会被阻塞,直到过了指定的时间窗口后才启发性地恢复。四、源代码地址GitHub·地址https://github.com/cicadasmile/husky-spring-cloudGitEE·地址https://gitee.com/cicadasmile/ 作者:架构月亮姨链接:https://juejin.im/post/5ef98cb95188252e734b45ea来源:掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 【云栖号在线课堂】每天都有产品技术专家分享!课程地址:https://yqh.aliyun.com/live 立即加入社群,与专家面对面,及时了解课程最新动态!【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK 原文发布时间:2020-06-30本文作者:XXXX本文来自:“XXXX公众号”,了解相关信息可以关注“XXXX”

优秀的个人博客,低调大师

如何快速实现spring boot技术api文档的生成

作为开发,写接口文档一直是一个很头痛的问题,尤其在前后端分离大量盛行的当下,后端必须要为前端同事提供明确的入参出参文档,否则整个对接工作无法顺利进行,前后端的相爱相杀的大戏时常上演。笔者刚工作的那些年,swagger都还没有正式发布,对接前端和app端的文档全靠手写markdown完成。写接口文档的时间常常感jio比写代码耗费的时间还长。随着技术的进步和众多开源人的努力,近几年针对java开发的文档生成工具原来越多。新入行的开发人员再也不用去体会过去的那些辛酸的历程。在java文档生成的这个领域,swagger一直是一只领头羊。可能占据着90%的市场, 除此还有像 Spring REST Doc这些有名的工具也被大量的使用,但是这些工具在笔者看来使用比较蛮烦,侵入性高。今天笔者要给大家介绍和推荐一款本人开源的文档工具smart-doc,也会介绍如何使用这个工具来生成自己的文档。 一、当前市面文档工具存在的问题 下面来列举当前市场上主流文档工具的问题: 侵入性强,需要编写大量注解,代表工具如:swagger,还有一些公司自研的文档工具 强依赖性,如果项目不想使用该工具,业务代码无法编译通过。 代码解析能力弱,使用文档不齐全,主要代码为国内众多开源的相关工具。 众多基于注释分析工具无法分析jar包里面的注释(sources jar包),需要人工配置源码路径,无法满足devops构建场景。 无法支持多模块复杂项目代码分析。 二、smart-doc如何解决上述问题 通过分析源码注释自动生成API文档,不用编写任何注解,秉承注释即文档的原则,并且提供注释强制检查。 smart-doc开发了smart-doc-maven-plugin插件,项目仅仅依赖插件,剔除插件无修改项目不报任何编译错误。 smart-doc在国内经过上百家企业的使用,做了很多场景的分析,解析能力很强。 smart-doc-maven-plugin插件自动分析项目依赖完成对自发布jar包和第三方jar包源码的加载,不需要指定任何源码路径。 smart-doc-maven-plugin能够识别项目依赖,多模块maven项目不是问题。 smart-doc文档维护比较完善,码云上的wiki有16个页面介绍各种使用方式。 关于smart-doc 三、smar-doc的不足 smart-doc并非是完美的,仍然有很多不足。 界面支持不完善,没有发送请求的页面,无法满足小团队自测。 一些使用场景支持不完善,存在一些bug。 暂不支持其他框架文档的生成,如:dubbo等。 开源团队人员少,功能实现慢。 当前缺乏gradle插件支持。 四、spring boot集成smart-doc生成文档。 上面说了关于一起其它工具的问题,也介绍了smart-doc的优缺点,下面进入正题,如何快速使用smart-doc生成文档。 4.1 添加插件 在spring boot项目pom中添加smart-doc的maven插件 <plugin> <groupId>com.github.shalousun</groupId> <artifactId>smart-doc-maven-plugin</artifactId> <version>1.0.2</version> <configuration> <!--指定生成文档的使用的配置文件--> <configFile>./src/main/resources/smart-doc.json</configFile> <!--指定项目名称--> <projectName>测试</projectName> </configuration> <executions> <execution> <phase>compile</phase> <goals> <goal>html</goal> </goals> </execution> </executions> </plugin> 4.2 添加smart-doc.json配置文件 在4.1的代码片段中看到需要给插件指定一个生成文档的配置文件smart-doc.json。文件内容如下: { "serverUrl": "http://127.0.0.1",//服务器地址 "isStrict": false,//是否用严格模式,严格模式强制检查注释 "allInOne": true,//所有接口文档合并生成到一个文档 "outPath": "src/main/resources/static/doc",//文档的输出路径 "projectName": "smart-doc"//指定项目名称,用于显示在文档中 } 上面的几行配置中,实际上只有outPath值必须要填的,其他都是非必须。想了解更多详细配置请参考smart-doc插件使用 4.3 编写controller接口 @RestController @RequestMapping("/user") public class UserController { /** * 添加用户 * @param user * @return */ @PostMapping("/add") public User addUser(@RequestBody User user){ return user; } } 实体类: public class User { /** * 用户名 */ private String userName; /** * 昵称 */ private String nickName; /** * 用户地址 */ private String userAddress; /** * 用户年龄 */ private int userAge; /** * 手机号 */ private String phone; /** * 创建时间 */ private Long createTime; /** * ipv6 */ private String ipv6; /** * 固定电话 */ private String telephone; //省略get set } 4.4 运行插件生成文档 效果见4.5 4.5 用户信息操作接口 添加用户 URL:http://localhost:8080/user/add Type:POST Content-Type:application/json; charset=utf-8 Request-parameters: Parameter Type Description Required Since userName string 用户名 false - nickName string 昵称 false - userAddress string 用户地址 false - userAge int 用户年龄 false - phone string 手机号 false - createTime number 创建时间 false - ipv6 string ipv6 false - telephone string 固定电话 false - Request-example: { "userName":"鹏飞.贺", "nickName":"raymond.gutkowski", "userAddress":"Apt. 819 萧旁7699号, 章丘, 滇 852063", "userAge":41, "phone":"15018373016", "createTime":1569934393095, "ipv6":"9eb3:fada:ffd2:912e:6225:1062:a2d7:718f", "telephone":"15018373016" } Response-fields: Field Type Description Since userName string 用户名 - nickName string 昵称 - userAddress string 用户地址 - userAge int 用户年龄 - phone string 手机号 - createTime number 创建时间 - ipv6 string ipv6 - telephone string 固定电话 - Response-example: { "userName":"鹏飞.贺", "nickName":"raymond.gutkowski", "userAddress":"Apt. 819 萧旁7699号, 章丘, 滇 852063", "userAge":41, "phone":"15018373016", "createTime":1569934393095, "ipv6":"9eb3:fada:ffd2:912e:6225:1062:a2d7:718f", "telephone":"15018373016" } 总结 当前最新的smart-doc结合插件后,已经做到了非常易于使用,只需要引入插件和根据自己需求填充相关的配置即可,非常的轻量级。将smart-doc推荐给大家是为了帮助更多的同行能够快速的生成api文档,也是给一些正在自研的同行提供一些实现思路。想要参考贡献帮助smart-doc不断完善的开发者,我们也非常欢迎加入。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册