首页 文章 精选 留言 我的

精选列表

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

风控开发指南:PHP集成风控经营异常预警实现精准合规审查

在构建B2B SaaS供应商风险管理CRM系统时,核心挑战在于如何对入驻的庞大供应商群体进行及时、准确的资质评估与合规确认。传统的供应商尽调往往依赖人工收集营业执照、线下走访或通过工商网站手动比对。这种方式不仅流程繁琐、效率低下,更难以实时感知供应商在经营过程中潜藏的“履约隐患”与“非存续异常主体”状态,极易导致供应链条的合规盲区。

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

风控开发指南:Go集成风控经营异常预警实现精准合规审查

在现代 B2B 采购与供应链管理平台中,企业准入评估是一项极其关键的环节。过去,平台往往依赖人工核查企业上传的营业执照与纸质证明,这种“离线资质核查”方式不仅流转周期漫长、审核效率低下,更致命的是,它无法实时防范企业在存续期间突然出现的资质变更或经营异常情况。尤其在大规模供应商矩阵中,一旦核心供应商被列入经营异常名录,将直接导致供应链中断或引发严重的履约隐患。

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

短视频云端批量混剪实操指南

本文为阿里云智能媒体服务 IMS「智能内容创作」实践指南第一期,讲述围绕新媒体广告营销场景,通过“去重策略”全自动批量混剪短视频,助力更高效、更快速地创作优质短视频内容。 欧叔|作者 5G 时代,越来越多的企业把短视频营销从“尝试”演变为“需求”。视频素材更直观、更形象的展现形式,往往能直击用户痛点,带来更好的广告投放效果。 由于各大短视频平台采用了“去重机制”以防视频盗用,内容完全相同的视频会采取“屏蔽”、“限流”处理,这就要求投放于不同账号的视频需要在内容、结构上有所差别。因此,基于有限数量的基础素材,智能化生成指定数量的新视频,是营销短视频创作的常见思路。 本文从实际场景案例入手实践阿里云智能内容创作的“批量混剪”功能,通过提交剪辑需要的数据结构 Timeline 对云端的音视频内容进行二次剪辑生产,将有限个数的素材,通过不同的排列组合、添加不同的转场、特效、字幕、音乐,最终合成出多个不同的成片视频。 01 Timeline 概念说明 如何配置Timeline? 在 iMovie 和 Premiere 等视频编辑软件中,一次剪辑会包含多个轨道以及相应素材的位置、时长等信息,而在阿里云智能内容创作中,则使用 Timeline 来描述这些信息。用户只需组装好 Timeline 并提交剪辑合成作业,就能自动生产出视频了。 下图是一个“多段视频拼接+Logo+文案转语音并生成字幕+背景音乐”的 Json 格式的 Timeline,符合剪辑和开发同学的理解。可以看到,Timeline 里只需描述视频顺序即可,在合成时会自动获取素材时长并推测视频在成片中的位置。 02 “批量混剪”具体实践 下图为本文示例视频所用到的生活类素材,由作者拍摄于“盒马”。 第一次实践,先将这些素材进行简单合成,此时,每个视频的剪辑策略很简单,提供 20 个素材,每次随机选取 7~8 个进行随机排序,截取相应的秒数,并前后拼接起来,得到效果如下。 https://v.youku.com/v_show/id_XNTk3MDQyNzY1Ng==.html 从效果看,这些视频的内容重复度还是比较高,最主要的原因是视频素材较少。 素材准备是剪辑中非常重要的阶段,一批优质的素材能更好地为后续的视频生产提效,“批量混剪”也一样,准备的素材越多,能得到的组合也越多,去重效果就越好。 “批量混剪”中用到的素材时长都很短,一般一个镜头仅需 3~5s,因此在拍摄过程中多拍一些素材,能极大优化生成视频的最终效果。同时,从不同角度、不同场景拍摄物品、选取被摄人物的不同动作等也是能实现进一步去重的小技巧。 第二次实践,这次提供 40 个素材,每次随机选取 7~8 个,用上面同样的策略剪出来的结果,可以看到重复度明显降低。 https://v.youku.com/v_show/id_XNTk3MDQyNzY4NA==.html 上述两个实践视频的制作过程相对简单,只对视频做了截取和拼接,并添加了字幕。之前对相关功能做了简单的介绍(智能媒体生产ICE一些常见场景),客户可以灵活使用。 如果素材足够优质,对素材简单拼接就能达到很好的效果。此外,阿里云 IMS 中还有特效、滤镜等功能,通过随机添加特效和滤镜能达到更好的去重效果。 https://v.youku.com/v_show/id_XNTk3MDQyNzc1Mg==.html 开发者(客户)可以利用随机特效功能很容易地控制每个素材的 Effects,接入也十分方便。 03 更多功能 除了以上谈到的,智能内容创作中还有更多剪辑特效功能,可以对素材内容进行“花式”加工。 |Transition转场:通过在任意相邻的两个素材之间添加随机转场效果使素材之间的切换有过渡、更自然,不同转场方式在表现形式上有较大的差别。 |Crop裁剪:对视频画面进行裁剪,比如裁剪视频的中间部分,或者裁剪出视频的主要内容(商品、人物等)。 |Flip翻转:对视频进行水平或垂直翻转,翻转后的视频内容有变化,但仍旧保持原视频的内容主题。 |Speed变速:调整素材的播放速度,进行快速或慢速播放,从而达到不一样的效果。 |RandomClip随机截取:对素材随机截取其中的一段,只需设置要截取的秒数即可。 |Font字体:调整字幕的字体,可以使用官方字体或自有版权字体。 |花字:通过变换字幕的描边、阴影、纹理等使字幕有不同的展示效果。 |字幕特效:对字幕添加可以设置时长与循环频率的动画特效。 |智能语音Voice:口播文案是短视频中常用的功能,在 Timeline 中可以通过编辑一段文本并使用不同的 Voice 合成不同效果的人声音频。 |背景音乐:通过更换背景音乐使成片的音频内容有变化,Timeline 中的音频轨可以添加多个,并对音频进行截取、拼接、调音等操作。 以上仅作简短介绍,具体功能内容详见官网: 剪辑制作Timeline 效果示例附录 Effect配置说明 常见Timeline示例 短视频常用功能 当视频添加了随机转场、随机字体、字幕动画时,内容去重效果更好。 https://v.youku.com/v_show/id_XNTk3MDQyNzc4OA==.html 需要注意的是,添加过多的效果对视频内容主体也有影响,需酌情添加。智能内容创作 Timeline 是一个很灵活的结构,可以基于自身需求进行灵活的编排。 04 写在最后 从剪辑的“专业度”来讲,批量混剪中用到的技术并不复杂,业务目标也是为了更好地在短视频平台做广告投放。在实际生产中,客户可以通过对 Timeline 进行组装来剪辑出效果不同且质量优质的短视频成片。 本篇演示了几个“批量混剪”的具体实践,欢迎更多开发者使用阿里云 IMS 智能内容创作,在 Timeline 的使用中探索更多更有趣的内容和玩法。 欢迎加入官方答疑钉钉群咨询交流:31783668

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

Goland 这些实操技巧,你可能还不会!

工欲善其事必先利其器。对于开发工程师同样如此,一个合适的开发工具能够有效提升我们的开发效率和定位问题的能力。 Golang IDE 被 Gopher 接受的其实不太多,Goland 和 VSCode 应该是占比重最大的。vim-go 真心就不推荐了,入门曲线太过陡峭,太过华而不实(vim 党不要喷我),我们就写程序而已,何苦为难自己呢。 我日常开发中,Goland,Vscode 一般会配合使用。对于 VsCode 来说,我唯一觉得不方便的是 VSCode 的 Debug 功能,配置起来麻烦,而且总有种很卡的感觉。 本篇文章我会介绍一点 Goland 开发中比较常见的一些技巧,帮助你快速入门 Goland。 Goland Debug 调试 这里首先吐槽下 delve,对于用惯 gdb 的人来说,delve 简直弱爆了。 举个例子,gdb 有个非常强大的 x[1]功能,能够去观察变量内存分布情况。delve 在 1.7.0 版本才提供这个功能,简单试用了一下,没有达到想象中的效果,不过也是可以使用的。这里就不在详细介绍,有兴趣的可以 delve help x 去查看。 更多时候我喜欢使用 goland 调试代码,基本满足日常的开发需求。这里分享几种进入 debug 模式的方式。 对于后端开发来说,一个趁手的接口调试工具是不可缺少的。在介绍如何 debug 接口之前,先推荐几款比较不错的接口调试工具。 REST Postman [2] GRPC Bloomrpc [3] GraphQL Insomnia [4] 如 何调试接口这里就不再文字介绍了,具体步骤提供了动图。 主要步骤: 打断点 点击 debug 按钮启动程序 Postman 调用接口 单步调试 有些情况下,我们封装完底层基础函数后,接口调用该函数一直报错。如果从外面一层一层的 debug 进来,会特别麻烦,使用单测函数作为 debug 的入口也是特别方便的事情。 设置参数 一般情况下,不管我们使用 Goland 启动程序还是 Debug,都会遇到让输入参数的情况的。这个是个蛮重要的功能,但是很多同学不会设置。 主要步骤: 点击右上角:Edit Configuration ... 在弹出的框里选择正确的 Working Directory 在 Program arguments 里填写对应的参数即可 go 工具链引入 使用 Vscode 的同学会注意到,当我们打开 Go 源码文件时,会提示我们安装一套完整的工具链,在这一点上 Vscode 比 Goland 优秀太多了。Goland 不但没有一键导入的功能,而且每个工程都需要引入一遍,着实太坑。 Goland 可以引入 gofmt, goimport,当然还可以自定义其他相关的工具。不过根据我的使用来看,开着 gofmt 就可以了。 推荐一些好用的插件 ideaVim Material Theme UI Monokai Pro theme Goland 莫名其妙的 Index 失效 Goland 在使用的过程中,可能会遇到莫名其妙的 Index 失效的情况。你可以通过下面的步骤来重新生成 Index。 go mod tidy go build . Goland -> Preferences -> Go -> Go Modules -> Enable Go Modules integration -> 配置 goproxy 右键点击项目根目录->Mark Directory as -> Resource root 重启 Goland 如果上面这些步骤执行完毕后,你的程序能够正常构建,但是 Goland 仍然提示 "Unresolved reference ", 那么恭喜你中奖了。 Goland 有很低概率会遇到 Index 完全失效,而且无法恢复,目测这是 Goland 的 Bug,遇到的概率不太高。 解决方案: 其实没有啥解决方案。我通常会这么做:彻底删除 Goland,再重新安装。 本篇文章中关于 Goland 的使用技巧,你是否感兴趣呢?欢迎留言评论,如果反响不错我会继续发出后续篇章(包括vscode)。 欢迎关注公众号。更多学习学习资料分享,关注公众号回复指令: 回复 0,获取 《Go 面经》 回复 1,获取 《Go 源码流程图》 [1]x:https://visualgdb.com/gdbreference/commands/x [2]Postman:https://www.postman.com/ [3]Bloomrpc:https://github.com/uw-labs/bloomrpc [4]Insomnia:https://support.insomnia.rest/ 本文分享自微信公众号 - HHFCodeRv(hhfcodearts)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

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

实操案例:使用Prometheus Operator进行集群监控

据Sysdig发布的容器报告,容器以及如Kubernetes等编排工具的使用增长了51%以上,大家开始将工作负载在集群中进行托管并管理。鉴于集群中短暂的状态,对于端到端的集群有一个十分重要的需求,即能够详细监控节点、容器以及pod。 IT工程师需要管理应用程序、集群(节点和数据),并且需要减少手动配置service、目标和数据存储的工作量,同时在应用程序每次关闭和返回时进行监控。这就需要一个无缝部署以及管理高可用监控系统(如Prometheus),其中可以与Operator一起处理抓取目标的动态配置、服务发现以及用于告警集群中各种目标的配置规则。同时,使用Operator模式编写代码以减少人工干预。 本文,我们将关注Prometheus Operator是如何工作的,service monitor在Prometheus Operator中是如何发现目标和获取指标的。 在集群监控中Prometheus Operator所扮演的角色 能够使用原生Kubernetes配置选项无缝安装Prometheus Operator 能够在Kubernetes命名空间中创建和摧毁一个Prometheus实例,某个特定的应用程序或者团队能够轻松地使用Operator 能够预配置配置文件,包括Kubernetes资源的版本、持久性、保留策略和replica 能够使用标签发现目标service,并根据熟悉的Kubernetes标签查询自动生成监控目标配置。 例如:当pod /service销毁并返回时,Prometheus Operator可以自动创建新的配置文件,无需人工干预。 在Operator模式下所需的组件 Custom Resource Definition(CRD):创建一个新的自定义资源,包括可指定的名称和模式,无需任何编程。Kubernetes API提供和处理自定义资源的存储。 自定义资源:扩展Kubernetes API或允许将自定义API引入kubernetes集群的对象。 自定义控制器:以新的方式处理内置的Kubernetes对象,如Deployment、Service等,或管理自定义资源,如同管理本机Kubernetes组件 Operator模式(适用于CRD和自定义控制器):Operator基于Kubernetes资源和控制器增加了允许Operator执行常见应用程序任务的配置。 Operator的工作流程 Operator在后台执行以下操作以管理自定义资源: 1、CRD创建:CRD定义规范和元数据,基于该规范和元数据应创建自定义资源。当创建CRD的请求时,使用Kubernetes内部模式类型(OpenAPI v3模式)验证元数据,然后创建自定义资源定义(CRD)对象 2、自定义资源创建根据元数据和CRD规范验证对象,并相应地创建自定义对象创建。 3、Operator(自定义控制器)开始监控event及其状态变更,并基于CRD管理自定义资源。它可以提供event在自定义资源上执行CRUD操作,因此每当更改自定义资源的状态时,都能被触发相应的event。 服务发现及自动配置获取的目标 Prometheus Operator使用Service Monitor CRD执行自动发现和自动配置获取的目标。 ServiceMonitoring包括以下组件: Service:实际上是service/deployment,它在定义的端点、端口暴露指标,并使用对应的标签进行标识。每当service或pod发生故障时,该service以相同的标签返回,因此使得它可被service monitor发现。 Service Monitor:可基于匹配的标签发现service的自定义资源。Servicemonitor处于部署了Prometheus CRD的命名空间中,但通过使用NamespaceSelector,它依旧能够发现部署在其他命名空间中的service。 Prometheus CRD:基于标签与service monitor相匹配并且能够生成Prometheus的配置。 Prometheus Operator:它可调用config-reloader组件以自动更新yaml配置,其中包含抓取目标的详细信息。 接下来我们来看一个简单的使用案例,以此理解Prometheus Operator时如何监控service的。 使用案例:使用Prometheus Operator进行Gerrit服务监控 Gerrit是一个代码review工具,主要用于DevOps CI流水线,在代码入库前对每个提交进行审阅。本文假设Gerrit已经在Kubernetes集群中运行,因此不再赘述Gerrit在Kubernetes作为服务运行的步骤。 如果你还没有Prometheus Operator,可以使用helm chart来安装或直接使用Rancher,在Rancher2.2及以上的版本中,Rancher会在新添加的集群中部署一个Prometheus Operator。以下组件将会被默认下载安装: prometheus-operator prometheus alertmanager node-exporter kube-state-metrics grafana service monitors to scrape internal kubernetes components kube-apiserver kube-scheduler kube-controller-manager etcd kube-dns/coredns 以下步骤将展示Prometheus Operator如何自动发现运行在Kubernetes集群上的Gerrit服务以及如何从Gerrit中抓取指标。 使用Gerrit-Prometheus插件暴露指标 可以使用Prometheus jar插件暴露Gerrit指标,但需要提前将该插件安装在Gerrit实例上运行。 Prometheus jar插件下载地址: https://gerrit-ci.gerritforge.com/ ,将jar放在Gerrit插件目录中:/var/gerrit/review_site/plugins/,并重启gerrit服务。 在管理员的web界面校验Prometheus插件:Gerrit -> Plugins -> Prometheus plugin。 创建一个账号和组并给予查看指标的访问权限 以管理员权限登录到Gerrit的web界面,访问:Projects>List>All-Projects。点击【Access】标签,再点击【edit】按钮。 在block global capabilities中,点击【Add Permission】并且在下拉列表中选择【View Metrics】。 在Gerrit中为用户生成一个token。 选择我们此前创建的组“Prometheus Metrics“,点击【Add】按钮。 滑至页面底部并点击【Save Changes】按钮。 创建secret以访问Gerrit服务 在Gerrit中生成token之后,你可以使用用户id和token来生成Base64编码格式的用户id和token,用于将凭证存储在Kubernetes中。 使用secret的详细信息创建一个yaml并在Kubernetes中创建secret。 kubectl apply -f gerrit-secret.yaml 将标签应用到服务 使用两个标签标记Gerrit服务,例如:app: gerrit and release: prometheus-operator kubectl label svc gerrit app=gerrit release=prometheus-operator 为Gerrit创建Service Monitor 在servicemonitoring添加端点的详细信息以发现Gerrit服务指标以及具有匹配标签的的selector,如下所示: 带标签的service selector Selector下的标签是用于标识服务的标签: Selector: matchLabels: app: gerrit release: prometheus-operator ServiceMonitor selector 元数据部分下的标签是指用于通过Prometheus CRD识别服务监视器的标签。 Metadata: labels: app: gerrit release: prometheus-operator Namespaceselector:在Gerrit服务所运行的Kubernetes集群中提供命名空间。Service可以在任何命名空间中运行,但service monitor只能在Prometheus Operator运行的命名空间创建,这样Prometheus CRD就可以识别service monitor对象。 在Prometheus中匹配Service Monitor selector 使用以下命令验证Prometheus对象中Service Monitor selector的部分: kubectl get prometheus Match and apply the label as given in step 4b for the Prometheus object. serviceMonitorSelector: matchLabels: release: prometheus-operator 注意:如果Prometheus-operator使用helm部署,标签release=Prometheus-operator已经应用到Prometheus对象上。我们依旧需要在service monitor中匹配这个标签,因为Prometheus CRD需要确定合适的service monitor。 以上servicemonitor创建步骤可以使用prometheus-operator helm自定义values.yaml来完成。 自动发现Gerrit服务 标签更新之后,Prometheus自定义对象将会自动调用config-reloader来读取终端并更新Prometheus配置文件。这是Prometheus Operator的一个好处,无需手动介入创建Prometheus配置文件和更新抓取的配置。 1、 打开Prometheus url:http://prometheusip:nodeport kubectl get svc prometheus以获取nodeport详细信息并用节点的详细信息来替代IP。 2、 访问菜单:Status -> Configuration,来查看使用抓取配置自动加载的Prometheus配置。在scrape_configs部分,可以查看Gerrit service monitor的详细信息,如下所示: 3、 访问菜单 -> Status -> Targets or Service Discovery。如果service monitor已经成功抓取Gerrit的指标,目标应该显示为健康[1/1up]。 在Grafana中的Gerrit 健康指标 Gerrit暴露了各种指标,如JVM运行时间、线程内存、heap size、error等。这些都可以在Grafana仪表板中配置以监控Gerrit的性能和运行状况(如下所示)。 Gerrit指标在scrape url下暴露: http://gerrit-svcip:nodeport/a/plugins/metrics-reporter-prometheus/metrics kubectl get svc prometheus-获取service 节点端口。 将gerrit-svcip、nodeport替换为gerrit服务的gerrit IP / nodeport的详细信息,暴露的指标将如下所示。 指标的值可以在Prometheus -> Graph 中的表达字段进行评估,如:caches_disk_cached_git_tags 在Grafana中配置指标以监控Gerrit的健康状况,选择数据源为Prometheus并在dashboard中配置widget。一些已经配置的关键指标有JVM_threads、Uptime、Http_Plugin errors、内存使用情况、事件等。 Prometheus Operator有助于Prometheus的无缝部署和管理、抓取目标的动态配置、服务发现、可扩展性、以及内置的SRE专业知识,这可以加速集群监控。 开箱即用的Prometheus 2018年年末,Rancher Labs宣布加强对Prometheus的支持,这将为跨多个Kubernetes集群和多个隔离租户环境提供更高的可见性。在Rancher2.2及以上的版本中,每当添加一个新的Kubernetes集群到Rancher中,Rancher都将在集群中部署一个Prometheus operator,然后在集群中创建一个Prometheus部署。此外,还支持以下两个功能: 集群范围内的Prometheus部署将被用于存储集群指标(如CPU节点和内存消耗),并存储从单个用户部署的应用程序中收集的项目级指标。 项目级的Grafana与Prometheus的通信将通过安全代理完成,该代理可为Prometheus实现多租户。安全代理工具PromQL语句可确保仅能通过用户项目的命名空间进行查询。 Rancher对Prometheus的增强支持,可确保为所有Kubernetes集群、所有项目和所有用户进行高效的部署和有效的监测。安全代理确保不在多租户之间重复共享数据,并且对多租户进行隔离。除此之外,Rancher还收集使用Prometheus处理的数据公开端点的任意自定义指标。所有指标均可用于Rancher内部的告警和决策,通过通知用户的Slack及PagerDuty进行简单操作,通过启动工作负载的横向扩展最终增加负载进行复杂操作。Rancher现在还拥有完全安全隔离和RBAC的集群级和项目级的指标和仪表盘。

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

Spring Cloud 上手实战-架构解析及实作

Spring简介 为什么要使用微服务 单体应用: 目前为止绝大部分的web应用软件采用单体应用,所有的应用的用户UI、业务逻辑、数据库访问都打包在一个应用程序上。 缺点: 开发相互干扰,随着应用的不断升级沟通协调成本增加 应用上线由于某个功能升级导致需要整体的构建、整体测试、整体发布 微服务 把单体应用拆分成小的、松藕合分布式服务的形式 每个应用一定是独立构建、独立部署与测试,应用也是独立发布,应用于应用直接通常通过restful API接口的形式进行相互调用。解决了单体应用带来的困扰。 Spring cloud 是什么 发展历史 2002,Rod Johonson发表了<<Expert One-on-One J2EE Design and Development>>, 包含了3万行的代码在包com.interface21中 2003,Juerge Hoeller,Yann Caroff 联系Rod,将书中代码开源,Yann提出Spring这个词,冠于书中代码; 并发布0.9,使用Apache 2.0协议;Thomas Risberg负责Spring JDBC;Ben Alex将Acegi Security贡献给Rod和Juergen 2004,1.0发布 2005,<<Professional Java Development with Spring Framework>> <<Pro Spring>>出版;1.2.6发布。 AspectJ Leader Adrian Coyler加入Interface21作为首席科学家; 2006,Security 1.0、Spring webflow 1.0发布;Spring 2.0发布; 2007,Spring Batch、WebService、Integration发布;Spring 2.5发布; 2008,Spring Integration 1.0,Spring 2.5.6,Spring Batch 1.0;买了g2One,一家提供Groovy and Grails的公司; 2009,被VMWare发了42亿美金买下;Spring Python、STS发布、3.0发布(将包拆开,不提供超级包),买了Cloud Foundry; 2010,VMWare买了RabbitMQ公司,获得RabbitMQ和Redis技术; 2011,Spring 3.1、Spring AMQP、Spring Data JPA、Spring-data-common 1.0 、Spring Data Redis、Spring Data Mongodb发布; 2012,Rod Johnson离开VMWare;Spring Android、Mobile发布; 2013,VMWare 和 EMC 合力组建了一家公司,Pivotal。Spring 4.0、Spring Boot发布; 2014,Spring 4.1.3、SpringBoot 1.0发布; 2015,Spring 4.2、4.3发布; 2016,Spring 4.3 GA 2017,Spirng 5.x Spring的出现让EJB等重量级的容器技术逐渐走向末路。Spring 通过对Bean的生命周期的管理,可以快速方便的实现业务的逻辑处理。Spring 可以方便的整合几乎所有的主流的开源项目如JPA,缓存,消息组合等等,方便的进行开发。 Spring Cloud实战 本实战目的:全程演示如何创建一个基础的、可用的Spring cloud分布式应用系统演示Spring Cloud各部分组件如何在应用之前协调、调用。了解整个Spring Cloud的项目基本情况,有一个初步的认识。本实战JAVA采用JDK8Spring Boot版本采用最新2.1.0 release.Spring Cloud版本采用Greenwich.M1。 2.2.1. Spring Cloud基础搭建 使用 阿里云的spring cloud 架构图在线设计地址: https://www.freedgo.com 即可使用Freedgo Desing 进行图形设计. 架构预览地址: https://www.freedgo.com/draw_index.html?#Uhttps://www.freedgo.com/templates/network/springcloud_aliyun.xml Freedgo Design 是一in款在线绘制专业图形的网站。Freedgo Design可以绘制各种类型的图形,针对业务逻辑的流程图,软件设计ER模板,工作流,各种云平台的系统部署架构图包括阿里云、AWS云、腾讯云、Oracle、Asure云、IBM云平台等。 2.2.1.1. 建立基础代码 开发工具:Intellij idea1、 建立一个mvn 工程项目使用的java jdk 采用jdk8 2.2.1.2. 服务发现 建立子模块discovery-service 我们可以看到mvn 依赖导入了netflix-eureka-serverSpring boot 会启动服务发现服务 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> 2.2.1.3. 服务配置 建立子模块config-service <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> 2.2.1.4. 服务路由 服务路由采用 Netflix Zuul 通过服务路由作为eureka client,可以被发现服务监控 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> 基础的组件创建完毕 2.2.1.5. 用户认证中心 2.2.1.6. 业务服务模块 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-oauth2</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-security</artifactId> </dependency> 2.2.2. 服务发现 传统服务发现方式通过网络DNS和负载均衡设备实现,需要网络和硬件设置支持,维护成本高,网络环境复杂居于云的服务发现具有如下优点 高可用,热部署 负载均衡 健康检查,容错机制 抽象服务的逻辑名称 使用Spring与Netflix Eureka实现服务发现 实现服务发现功能需要配置服务发现端及需要注册服务配置客户端1、 发现服务端配置服务注册需要30 s 的时间才能显示在 Eureka 服务中,因为 Eureka 需要从服务接收3次连续心跳包 ping,每次心跳包 ping 间隔10 s,然后才能使用这个服务。在部署和测试服务时,要牢记这一点。application.yml server: port: 8761 # Eureka 服务器将要监听的端口 eureka: client: registerWithEureka: false #不要使用 Eureka 服务进行注册 fetchRegistry: false #不要在本地缓存注册表信息 使用一个新的注解@EnableEurekaServer,就可以让我们的服务成为一个 Eureka 服务 2、 服务发现客户端配置 以config-service为例 需要做2件事情1、 成为服务发现的客户端 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> 2、 配置application.yml(对应config-server来说我们只需要配置如下) spring: cloud: config: discovery: enabled: true 启动运行查看 http://localhost:8761/eureka/apps/config-service。 应用作为服务发现的客户端设置 1、 添加客户端依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> 2、 配置application.yml spring: application: name: business_service eureka: instance: preferIpAddress: true #注册服务的 IP,而不是服务器名称 client: registerWithEureka: true #向 Eureka 注册服务 fetchRegistry: true serviceUrl: #拉取注册表的本地副本 defaultZone: http://localhost:8761/eureka/ #Eureka 服务的位置 同样通过mvn spring-boot:run 打开http://localhost:8761 ,business_service已经注册成功 使用服务发现查找服务 2.2.3. 用户认证中心 OAuth2协议说明: 整体OAuth协议包括两方面:1、 访问授权:用户必须通过授权获取令牌2、 资源权限:通过授权的用户访问受保护的资源,根据定义访问权限来决定是否可以访问资源配置说明: 启用OAuth授权服务 增加@EnableAuthorizationServer 用于告诉 Spring Cloud,该服务将作为 OAuth2 服务 package com.yuaoq.train.business; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer; @SpringBootApplication @EnableResourceServer @EnableAuthorizationServer public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } OAuth访问授权配置,配置注册的客户端应用程序 @Configuration public class Auth2Config extends AuthorizationServerConfigurerAdapter { @Autowired private AuthenticationManager authenticationManager; @Autowired private UserDetailsService userDetailsService; // 覆盖 configure()方法。这定义了哪些客户端将注册到服务 @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.inMemory() .withClient("yuaoq") .secret("{noop}secret") .authorizedGrantTypes( "refresh_token", "password", "client_credentials") .scopes("webclient","mobileclient"); } // 该方法定义了 AuthenticationServerConfigurer 中使用的不同组件。这段代码告诉 Spring 使用 Spring 提供的默认验证管理器和用户详细信息服务 @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints .authenticationManager(authenticationManager) .userDetailsService(userDetailsService); } } 配置用户权限 @Configuration public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter { @Override @Bean // AuthenticationManagerBean 被 Spring Security 用来处理验证 public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } // Security 使用 UserDetailsService 处理返回的用户信息,这些用户信息将由 Spring Security 返回 @Override @Bean public UserDetailsService userDetailsServiceBean() throws Exception { return super.userDetailsServiceBean(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { // configure()方法是定义用户、密码和角色的地方 auth.inMemoryAuthentication() .withUser("admin") .password("{noop}password") .roles("ADMIN","USER") .and() .withUser("anyone") .password("{noop}password") .roles("USER"); } } 获取用户信息(提供给其他服务获取用户信息使用) @GetMapping(value = "/auth/user") public Map<String, Object> user(OAuth2Authentication user) { Map<String, Object> userInfo = new HashMap<>(); userInfo.put("user", user.getUserAuthentication().getPrincipal()); userInfo.put("authorities", AuthorityUtils.authorityListToSet(user.getUserAuthentication().getAuthorities())); return userInfo; } 通过postman测试自此提供了一个用户认证的微服务模块. 2.2.3.1. 业务模块微服务 1、 对外提供restful Api@RestController:由spring web提供的居于restful 的接口标签生成一个restful api @PostMapping("/list") public ResponseEntity<List<String>> getBusiness() throws Exception { List<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); return Optional.of(list) .map(a -> new ResponseEntity<List<String>>(a, HttpStatus.OK)) .orElseThrow(() -> new Exception("error")); } 使用postman调用接口 从postman返回的结果可以看到401,未授权。因为business_service服务引入了spring-cloud-starter-security 那么默认是会对所有访问做安全控制。 2、 服务的授权保护现在business/list 是未授权,那怎么配置一个受保护的oauth2.0资源,通过如下步骤 设置服务是一个受oauth保护的资源 定义应用的OAuth属性定义回调 URL security: oauth2: resource: user-info-uri: http://localhost:8282/auth/user 定义授权用户可以访问 @Configuration public class ResourceServerConfig extends ResourceServerConfigurerAdapter { // antMatchers()允许开发人员限制对受保护的 URL 和 HTTP DELETE 动词的调用 // hasRole()方法是一个允许访问的角色列表,该列表由逗号分隔 @Override public void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers(HttpMethod.POST, "/api/v1/business/**") .hasRole("ADMIN") .anyRequest() .authenticated(); } } 该段代码说明具有ADMIN角色的用户可以访问/api/v1/business/ 下的所有的POST 请求验证如下: 至此通过OAuth2.0保护微服务的基本做法已经完成。 2.2.4. 服务路由网关服务网关:服务客户端不再直接调用服务。取而代之的是,服务网关作为单个策略执行点(Policy Enforcement Point,PEP),所有调用都通过服务网关进行路由,然后被路由到最终目的地。@EnabeZuulServer使用此注解将创建一个 Zuul 服务器,它不会加载任何 Zuul 反向代理过滤器,也不会使用 Netflix Eureka 进行服务发现. 成为一个服务网关步骤:1、 添加@EnableZuulProxy2、 在application.yml添加route 规则 zuul: sensitive-headers: set-cookies routes: business_service: /busi/** 通过postman测试如下:

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

【实操】弹性公网EIP的购买及使用

弹性公网IP(Elastic IP Address,简称EIP),是可以独立购买和持有的公网IP地址资源。目前,EIP可绑定到专有网络类型的ECS实例、专有网络类型的私网SLB实例和NAT网关上,且可以动态解绑,实现公网IP和ECS、NAT网关、SLB的解耦,满足灵活管理的要求。接下来,我们就将介绍如何购买及使用EIP,对架构有要求或者想要优化运维的一定不要错过。 购买 首先,进入阿里云官网,找到EIP购买界面,在这里选择地域、带宽及计费方式。我们选择了如下的配置用来演示。立即购买后进入确认订单页面,勾选服务协议后点击直接开通,即可成功购买。 绑定 购买成功后进入管理控制台。点击上图右侧的绑定即可查看可以绑定的设备类型。根据自身需求选择,这里我们演示的是绑定一台已经提前购买好的云服务器ECS。确认后,稍等一会儿,现在的状态就是已分配了。 解绑 开篇我们说过可以灵活管理,就是因为EIP方便用户动态解绑。现在我们点击右侧解绑跳出确认框,点击确认。稍等片刻,状态就由已分配变为可用了,绑定和解绑的字体颜色也转换回来了。 以上就是本期的全部内容。由于EIP的使用过于灵活,能在多种使用场景下达成多种使用效果,这里就不举例子了。欢迎大家在评论区留言提问,您能想到的使用场景有哪些呢?或者您想了解哪些方向的使用细节? 想获得更多信息,请扫描二维码,关注云特快。如您有疑问也可通过公众号或者直接来电400-650-2029与资深专家进行一对一沟通解决。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

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

Nacos

Nacos

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

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册