该文章是根据OpenResty Con 2015技术大会的演讲《Nginx+Lua在京东商品详情页的大规模应用》细化而来,希望对大家有用。
京东商品详情页技术方案在之前《构建需求响应式亿级商品详情页》这篇文章已经为大家揭秘了,接下来为大家揭秘下双十一抗下几十亿流量的商品详情页统一服务架构,这次双十一整个商品详情页没有出现不服务的情况,服务非常稳定。统一服务提供了:促销和广告词合并服务、库存状态/配送至服务、延保服务、试用服务、推荐服务、图书相关服务、详情页优惠券服务、今日抄底服务等服务支持;这些服务中有我们自己做的服务实现,而有些是简单做下代理或者接口做了合并输出到页面,我们聚合这些服务到一个系统的目的是打造服务闭环,优化现有服务,并为未来需求做准备,跟着自己的方向走,而不被别人乱了我们的方向。
大家在页面中看到的c.3.cn/c0.3.cn/c1.3.cn/cd.jd.com请求都是统一服务的入口。
为什么需要统一服务
商品详情页虽然只有一个页面,但是依赖的服务众多,我们需要把控好入口,一统化管理。这样的好处:统一管理和监控,出问题可以统一降级;可以把一些相关接口合并输出,减少页面的异步加载请求;一些前端逻辑后移到服务端,前端只做展示,不进行逻辑处理。
有了它,所有入口都在我们服务中,我们可以更好的监控和思考我们页面的服务,让我们能运筹于帷幄之中,决胜于千里之外。在设计一个高度灵活的系统时,要想着当出现问题时怎么办:是否可降级、不可降级怎么处理、是否会发送滚雪球问题、如何快速响应异常;完成了系统核心逻辑只是保证服务能工作,服务如何更好更有效或者在异常情况下能正常工作也是我们要深入思考和解决的问题。
整体架构
整体流程:
1、请求首先进入Nginx,Nginx调用Lua进行一些前置逻辑处理,如果前置逻辑不合法直接返回;然后查询本地缓存,如果命中直接返回数据;
2、如果本地缓存不命中数据,则查询分布式Redis集群,如果命中数据,则直接返回;
3、如果分布式Redis集群不命中,则会调用Tomcat进行回源处理;然后把结果异步写入Redis集群,并返回。
如上是整个逻辑流程,可以看到我们在Nginx这一层做了很多前置逻辑处理,以此来减少后端压力,另外我们Redis集群分机房部署,如下所示:
即数据会写一个主集群,然后通过主从方式把数据复制到其他机房,而各个机房读自己的集群;此处没有在各个机房做一套独立的集群来保证机房之间没有交叉访问,这样做的目的是保证数据一致性。
在这套新架构中,我们可以看到Nginx+Lua已经是我们应用的一部分,我们在实际使用中,也是把它做为项目开发,做为应用进行部署。
一些架构思路和总结
我们主要遵循如下几个原则设计系统架构:
- 两种读服务架构模式
- 本地缓存
- 多级缓存
- 统一入口/服务闭环
- 引入接入层
- 前端业务逻辑后置
- 前端接口服务端聚合
- 服务隔离
两种读服务架构模式
1、读取分布式Redis数据架构
可以看到Nginx应用和Redis单独部署,这种方式是一般应用的部署模式,也是我们统一服务的部署模式,此处会存在跨机器、跨交换机或跨机柜读取Redis缓存的情况,但是不存在跨机房情况,因为通过主从把数据复制到各个机房。如果对性能要求不是非常苛刻,可以考虑这种架构,比较容易维护。
2、读取本地Redis数据架构
可以看到Nginx应用和Redis集群部署在同一台机器,这样好处可以消除跨机器、跨交换机或跨机柜,甚至跨机房调用。如果本地Redis集群不命中, 还是回源到Tomcat集群进行取数据。此种方式可能受限于TCP连接数,可以考虑使用unix domain socket套接字减少本机TCP连接数。如果单机内存成为瓶颈(比如单机内存最大256GB),就需要路由机制来进行Sharding,比如按照商品尾号Sharding,Redis集群一般采用树状结构挂主从部署。
本地缓存
我们把Nginx作为应用部署,因此我们大量使用Nginx共享字典作为本地缓存,Nginx+Lua架构中,使用HttpLuaModule模块的shared dict做本地缓存( reload不丢失)或内存级Proxy Cache,提升缓存带来的性能并减少带宽消耗;另外我们使用一致性哈希(如商品编号/分类)做负载均衡内部对URL重写提升命中率。
我们在缓存数据时采用了维度化存储缓存数据,增量获取失效缓存数据(比如10个数据,3个没命中本地缓存,只需要取这3个即可);维度如商家信息、店铺信息、商家评分、店铺头、品牌信息、分类信息等;比如我们本地缓存30分钟,调用量减少差不多3倍。
另外我们使用一致性哈希+本地缓存,如库存数据缓存5秒,平常命中率:本地缓存25%;分布式Redis28%;回源47%;一次普通秒杀活动命中率:本地缓存 58%;分布式Redis 15%;回源27%;而某个服务使用一致哈希后命中率提升10%;对URL按照规则重写作为缓存KEY,去随机,即页面URL不管怎么变都不要让它成为缓存不命中的因素。
多级缓存
对于读服务,我们在设计时会使用多级缓存来尽量减少后端服务压力,在统一服务系统中,我们设计了四级缓存,如下所示:
1.1、首先在接入层,会使用Nginx本地缓存,这种前端缓存主要目的是抗热点;根据场景来设置缓存时间;
1.2、如果Nginx本地缓存不命中,接着会读取各个机房的分布式从Redis缓存集群,该缓存主要是保存大量离散数据,抗大规模离散请求,比如使用一致性哈希来构建Redis集群,即使其中的某台机器出问题,也不会出现雪崩的情况;
1.3、如果从Redis集群不命中,Nginx会回源到Tomcat;Tomcat首先读取本地堆缓存,这个主要用来支持在一个请求中多次读取一个数据或者该数据相关的数据;而其他情况命中率是非常低的,或者缓存一些规模比较小但用的非常频繁的数据,如分类,品牌数据;堆缓存时间我们设置为Redis缓存时间的一半;
1.4、如果Java堆缓存不命中,会读取主Redis集群,正常情况该缓存命中率非常低,不到5%;读取该缓存的目的是防止前端缓存失效之后的大量请求的涌入,导致我们后端服务压力太大而雪崩;我们默认开启了该缓存,虽然增加了几毫秒的响应时间,但是加厚了我们的防护盾,使服务更稳当可靠。此处可以做下改善,比如我们设置一个阀值,超过这个阀值我们才读取主Redis集群,比如Guava就有RateLimiter API来实现。
统一入口/服务闭环
在《构建需求响应式亿级商品详情页》中已经讲过了数据异构闭环的收益,在统一服务中我们也遵循这个设计原则,此处我们主要做了两件事情:
1、数据异构,如判断库存状态依赖的套装、配件关系我们进行了异构,未来可以对商家运费等数据进行异构,减少接口依赖;
2、服务闭环,所有单品页上用到的核心接口都接入统一服务;有些是查库/缓存然后做一些业务逻辑,有些是http接口调用然后进行简单的数据逻辑处理;还有一些就是做了下简单的代理,并监控接口服务质量。
引入Nginx接入层
我们在设计系统时需要把一些逻辑尽可能前置以此来减轻后端核心逻辑的压力,另外如服务升级/服务降级能非常方便的进行切换,在接入层我们做了如下事情:
- 数据校验/过滤逻辑前置、缓存前置、业务逻辑前置
- 降级开关前置
- AB测试
- 灰度发布/流量切换
- 监控服务质量
- 限流
数据校验/过滤逻辑前置
我们服务有两种类型的接口:一种是用户无关的接口,另一种则是用户相关的接口;因此我们使用了两种类型的域名c.3.cn/c0.3.cn/c1.3.cn和cd.jd.com;当我们请求cd.jd.com会带着用户cookie信息到服务端;在我们服务器上会进行请求头的处理,用户无关的所有数据通过参数传递,在接入层会丢弃所有的请求头(保留gzip相关的头);而用户相关的会从cookie中解出用户信息然后通过参数传递到后端;也就是后端应用从来就不关心请求头及Cookie信息,所有信息通过参数传递。
请求进入接入层后,会对参数进行校验,如果参数校验不合法直接拒绝这次请求;我们对每个请求的参数进行了最严格的数据校验处理,保证数据的有效性。如下所示,我们对关键参数进行了过滤,如果这些参数不合法就直接拒绝请求。
另外我们还会对请求的参数进行过滤然后重新按照固定的模式重新拼装URL调度到后端应用,此时URL上的参数是固定的而且是有序的,可以按照URL进行缓存。
缓存前置
我们把很多缓存前置到了接入层,来进行热点数据的削峰,而且配合一致性哈希可能提升缓存的命中率。在缓存时我们按照业务来设置缓存池,减少相互之间的影响和提升并发。我们使用Lua读取共享字典来实现本地缓存。
业务逻辑前置
我们在接入层直接实现了一些业务逻辑,原因是当在高峰时出问题,可以在这一层做一些逻辑升级;我们后端是Java应用,当修复逻辑时需要上线,而一次上线可能花费数十秒时间启动应用,重启应用后Java应用JIT的问题会存在性能抖动的问题,可能因为重启造成服务一直启动不起来的问题;而在Nginx中做这件事情,改完代码推送到服务器,重启只需要秒级,而且不存在抖动的问题。这些逻辑都是在Lua中完成。
降级开关前置
我们降级开关分为这么几种:接入层开关和后端应用开关、总开关和原子开关;我们在接入层设置开关的目的是防止降级后流量还无谓的打到后端应用;总开关是对整个服务降级,比如库存服务默认有货;而原子开关时整个服务中的其中一个小服务降级,比如库存服务中需要调用商家运费服务,如果只是商家运费服务出问题了,此时可以只降级商家运费服务。另外我们还可以根据服务重要程度来使用超时自动降级机制。
我们使用init_by_lua_file初始化开关数据,共享字典存储开关数据,提供API进行开关切换(switch_get(“stock.api.not.call”) ~= “1”)。可以实现:秒级切换开关、增量式切换开关(可以按照机器组开启,而不是所有都开启)、功能切换开关、细粒度服务降级开关、非核心服务可以超时自动降级。
比如双十一期间我们有些服务出问题了,我们进行过大服务和小服务的降级操作,这些操作对用户来说都是无感知的。
AB测试
对于服务升级,最重要的就是能做AB测试,然后根据AB测试的结果来看是否切新服务;而有了接入层非常容易进行这种AB测试;不管是上线还是切换都非常容易。可以在Lua中根据请求的信息调用不同的服务或者upstream分组即可完成AB测试。
灰度发布/流量切换
对于一个灵活的系统来说,能随时进行灰度发布和流量切换是非常重要的一件事情,比如验证新服务器是否稳定,或者验证新的架构是否比老架构更优秀,有时候只有在线上跑着才能看出是否有问题;我们在接入层可以通过配置或者写Lua代码来完成这件事情,灵活性非常好。可以设置多个upstream分组,然后根据需要切换分组即可。
监控服务质量
对于一个系统最重要的是要有双眼睛能盯着系统来尽可能早的发现问题,我们在接入层会对请求进行代理,记录status、request_time、response_time来监控服务质量,比如根据调用量、状态码是否是200、响应时间来告警。
限流
我们系统中存在的主要限流逻辑是:对于大多数请求按照IP请求数限流,对于登陆用户按照用户限流;对于读取缓存的请求不进行限流,只对打到后端系统的请求进行限流。还可以限制用户访问频率,比如使用ngx_lua中的ngx.sleep对请求进行休眠处理,让刷接口的速度降下来;或者种植cookie token之类的,必须按照流程访问。当然还可以对爬虫/刷数据的请求返回假数据来减少影响。
前端业务逻辑后置
前端JS应该尽可能少的业务逻辑和一些切换逻辑,因为前端JS一般推送到CDN,假设逻辑出问题了,需要更新代码上线,推送到CDN然后失效各个边缘CDN节点;或者通过版本号机制在服务端模板中修改版本号上线,这两种方式都存在效率问题,假设处理一个紧急故障用这种方式处理完了可能故障也恢复了。因此我们的观点是前端JS只拿数据展示,所有或大部分逻辑交给后端去完成,即静态资源CSS/JS CDN,动态资源JSONP;前端JS瘦身,业务逻辑后置。
在双十一期间我们的某些服务出问题了,不能更新商品信息,此时秒杀商品需要打标处理,因此我们在服务端完成了这件事情,整个处理过程只需要几十秒就能搞定,避免了商品不能被秒杀的问题。而如果在JS中完成需要耗费非常长的时间,因为JS在客户端还有缓存时间,而且一般缓存时间非常长。
前端接口服务端聚合
商品详情页上依赖的服务众多,一个类似的服务需要请求多个不相关的服务接口,造成前端代码臃肿,判断逻辑众多;而我无法忍受这种现状,我想要的结果就是前端异步请求我的一个API,我把相关数据准备好发过去,前端直接拿到数据展示即可;所有或大部分逻辑在服务端完成而不是在客户端完成;因此我们在接入层使用Lua协程机制并发调用多个相关服务然后最后把这些服务进行了合并。
比如推荐服务:最佳组合、推荐配件、优惠套装;通过
http://c.3.cn/recommend?methods=accessories,suit,combination&sku=1159330&cat=6728,6740,12408&lid=1&lim=6进行请求获取聚合的数据,这样原来前端需要调用三次的接口只需要一次就能吐出所有数据。
我们对这种请求进行了API封装,如下所示:
比如库存服务,判断商品是否有货需要判断:1、主商品库存状态、2、主商品对应的套装子商品库存状态、主商品附件库存状态及套装子商品附件库存状态;套装商品是一个虚拟商品,是多个商品绑定在一起进行售卖的形式。如果这段逻辑放在前段完成,需要多次调用库存服务,然后进行组合判断,这样前端代码会非常复杂,凡是涉及到调用库存的服务都要进行这种判断;因此我们把这些逻辑封装到服务端完成;前端请求http://c0.3.cn/stock?skuId=1856581&venderId=0&cat=9987,653,655&area=1_72_2840_0&buyNum=1&extraParam={%22originid%22:%221%22}&ch=1&callback=getStockCallback,然后服务端计算整个库存状态,而前端不需要做任何调整。在服务端使用Lua协程并发的进行库存调用,如下图所示:
比如今日抄底服务,调用接口太多,如库存、价格、促销等都需要调用,因此我们也使用这种机制把这几个服务在接入层合并为一个大服务,对外暴露:http://c.3.cn/today?skuId=1264537&area=1_72_2840_0&promotionId=182369342&cat=737,752,760&callback=jQuery9364459&_=1444305642364。
我们目前合并的主要有:促销和广告词合并、配送至相关服务合并。而未来这些服务都会合并,会在前端进行一些特殊处理,比如设置超时,超时后自动调用原子接口;接口吐出的数据状态码不对,再请求一次原子接口获取相关数据。
服务隔离
服务隔离的目的是防止因为某些服务抖动而造成整个应用内的所有服务不可用,可以分为:应用内线程池隔离、部署/分组隔离、拆应用隔离。
应用内线程池隔离,我们采用了Servlet3异步化,并为不同的请求按照重要级别分配线程池,这些线程池是相互隔离的,我们也提供了监控接口以便发现问题及时进行动态调整,该实践可以参考《商品详情页系统的Servlet3异步化实践》。
部署/分组隔离,意思是为不同的消费方提供不同的分组,不同的分组之间不相互影响,以免因为大家使用同一个分组导致有些人乱用导致整个分组服务不可用。
拆应用隔离,如果一个服务调用量巨大,那我们便可以把这个服务单独拆出去,做成一个应用,减少因其他服务上线或者重启导致影响本应用。
相关文章
相关推荐
本文以京东商品详情页为例,探讨了其后端架构使用Nginx+Lua技术的实践,以及如何在大规模应用中优化服务架构和提高系统性能。 一、商品详情页概述 京东商品详情页涵盖多种购物场景,包括通用版、闪购、全球购、服装...
17 京东商品详情页服务闭环实践 348 17.1 为什么需要统一服务 348 17.2 整体架构 349 17.3 一些架构思路和总结 350 17.3.1 两种读服务架构模式 351 17.3.2 本地缓存 352 17.3.3 多级缓存 353 17.3.4 统一入口/服务...
2、基于更加完整的业务架构来讲解,从最源头的商品服务、价格服务、库存服务开始,从业务数据的变更到缓存数据的生产,将整个商品详情页系统架构串联起来。虽然上游服务的业务还是做了大幅度的简化,但是业务架构...
数据集介绍:多类道路车辆目标检测数据集 一、基础信息 数据集名称:多类道路车辆目标检测数据集 图片数量: - 训练集:7,325张图片 - 验证集:355张图片 - 测试集:184张图片 总计:7,864张道路场景图片 分类类别: - Bus(公交车):城市道路与高速场景中的大型公共交通工具 - Cars(小型汽车):涵盖轿车、SUV等常见乘用车型 - Motorbike(摩托车):两轮机动车辆,含不同骑行姿态样本 - Truck(卡车):包含中型货运车辆与重型运输卡车 标注格式: YOLO格式标注,包含归一化坐标的边界框与类别标签,适配主流目标检测框架。 数据特性: 覆盖多种光照条件与道路场景,包含车辆密集分布与复杂背景样本。 二、适用场景 自动驾驶感知系统开发: 用于训练车辆识别模块,提升自动驾驶系统对道路参与者的实时检测与分类能力。 交通流量监控分析: 支持构建智能交通管理系统,实现道路车辆类型统计与密度分析。 智慧城市应用: 集成至城市级交通管理平台,优化信号灯控制与道路资源分配。 学术研究领域: 为计算机视觉算法研究提供标准化评测基准,支持多目标检测模型优化。 三、数据集优势 高场景覆盖率: 包含城市道路、高速公路等多种驾驶环境,覆盖车辆静止、行驶、遮挡等现实场景。 精细化标注体系: 采用YOLO标准格式标注,每张图片均经过双重质检,确保边界框与类别标签的精准对应。 类别平衡设计: 四类车辆样本量经科学配比,避免模型训练时的类别偏向问题。 工程适配性强: 可直接应用于YOLO系列模型训练,支持快速迁移至车载计算平台部署。 现实应用价值: 专注自动驾驶核心检测需求,为车辆感知模块开发提供高质量数据支撑。
内容概要:本文详细介绍了电镀车间智能化生产线的设计与实现,重点在于五台双钩行车与一台三爪机械手的协调运作。系统采用485总线和TCP/IP双通道通信架构,结合Modbus-RTU协议确保底层设备间的稳定通信,而上位机则通过TCP/IP协议实现多屏数据同步。绝对定位系统使设备重启后无需回零,直接恢复作业。文中展示了Python、STL、JavaScript等多种编程语言的应用实例,涵盖通信中间件、状态机管理和HMI界面开发等方面。此外,还讨论了通信延迟、接地问题等实际调试过程中遇到的技术挑战及其解决方案。 适合人群:从事工业自动化、智能制造领域的工程师和技术人员,尤其是对通信协议、运动控制和人机交互感兴趣的读者。 使用场景及目标:适用于希望深入了解工业自动化生产线设计原理的专业人士。主要目标是掌握485/TCP混合通信架构、绝对定位技术和多屏协同控制的实际应用方法。 其他说明:文章不仅提供了理论知识,还包括大量实用代码示例,帮助读者更好地理解和实践相关技术。同时强调了硬件配置的重要性,如终端电阻匹配和接地处理等细节对于系统稳定性的影响。
内容概要:本文介绍了DeepSeek与Mermaid结合实现可视化图表自动化生成的技术及其应用场景。DeepSeek是一款由杭州深度求索人工智能基础技术研究有限公司开发的大语言模型,具有强大的自然语言处理能力,能理解复杂的自然语言指令并生成对应的Mermaid代码。Mermaid是一款基于文本的开源图表绘制工具,能够将简洁的文本描述转化为精美的流程图、序列图、甘特图等。两者结合,通过DeepSeek将自然语言转化为Mermaid代码,再由Mermaid将代码渲染成直观的图表,极大提高了图表制作的效率和准确性。文章详细描述了DeepSeek的发展历程、技术架构及应用场景,Mermaid的基础语法和图表类型,并通过一个电商平台开发项目的实战演练展示了二者结合的具体应用过程。 适合人群:具备一定编程基础和技术理解能力的研发人员、项目经理、数据分析师等。 使用场景及目标:①需求分析阶段,快速生成业务流程图和功能关系图;②设计阶段,生成系统架构图和数据库设计图;③实现阶段,辅助代码编写,提高编码效率;④验证阶段,生成测试用例和测试报告图表,直观展示测试结果。 阅读建议:在学习和使用DeepSeek与Mermaid的过程中,建议读者结合具体项目需求,多实践生成图表和代码,熟悉两者的交互方式和使用技巧,充分利用官方文档和社区资源解决遇到的问题,逐步提高图表绘制和代码编写的准确性和效率。
内容概要:本文详细探讨了基于MPC(模型预测控制)的车辆轨迹跟踪控制方法,特别是在加入四轮侧偏角软约束前后的效果对比。文章首先介绍了MPC的基本原理及其在车辆控制中的应用背景,然后展示了不加侧偏角约束时MPC控制的表现,如车辆在高速过弯时出现的不稳定行为,包括侧偏角过大导致的轮胎非线性特性显现,以及由此引发的轨迹跟踪误差增大等问题。接着,文章深入分析了加入侧偏角软约束后的改进措施,包括优化目标函数、引入惩罚项等,使得控制器能够在保持较高跟踪精度的同时,有效避免轮胎进入非线性区,从而提高车辆的稳定性和安全性。最后,通过联合仿真(Simulink + CarSim)验证了加入侧偏角软约束的有效性,提供了详细的仿真数据和图表支持。 适合人群:从事自动驾驶、车辆工程、控制系统设计的研究人员和技术人员。 使用场景及目标:适用于需要深入了解MPC在车辆轨迹跟踪控制中的应用,尤其是关注车辆稳定性和轮胎特性的研究人员。目标是通过实例分析,展示如何通过合理的约束设计提升MPC控制性能。 其他说明:文中提供的仿真数据和代码有助于进一步理解和复现实验结果,建议结合相关文献进行深入学习。
基于springboot+vue前后端分离,学生选课系统(源码+Mysql数据库+论文+PPT+教程),高分项目,开箱即用(毕业设计)(课堂设计) 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对学生选课信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用学生选课系统可以有效管理,使信息管理能够更加科学和规范。 学生选课系统在Eclipse环境中,使用Java语言进行编码,使用Mysql创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务,其管理员管理专业,教师,学生,课程,查看学生选课以及学生成绩信息。教师查询学生,查询课程,审核学生选课信息,为学生学习的课程进行成绩打分。学生参与课程选课,查询选课信息,查询已选课程的成绩信息。 总之,学生选课系统集中管理信息,有着保密性强,效率高,存储空间大,成本低等诸多优点。它可以降低信息管理成本,实现信息管理计算机化。
# 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
内容概要:本文详细介绍了基于180nm工艺设计的三种不同结构的低压差线性稳压器(LDO),分别为超低功耗LDO、三级放大器LDO及其各自的特点和应用场景。文中不仅提供了理论解释,还附有具体的代码片段(如Verilog和Python)用于展示关键模块的控制逻辑和性能测试方法。此外,文章分享了工程文件,包括测试电路和性能测试结果,使读者可以直接应用于实际项目中。 适合人群:从事芯片设计、电源管理领域的工程师和技术研究人员。 使用场景及目标:帮助工程师理解和掌握180nm工艺下LDO的设计原理和实现细节,适用于便携式设备和其他对功耗要求严格的场合。同时,提供的工程文件可以作为实际项目的参考资料,加速产品开发进程。 其他说明:文章强调了180nm工艺的成本优势以及在特定应用场景下的性能表现,鼓励读者通过提供的工程文件进行进一步的研究和实践。
光刻软件:Opal二次开发_(10).Opal二次开发案例分析.docx 光刻软件:Opal二次开发_(11).光刻工艺参数设置与调整.docx 光刻软件:Opal二次开发_(12).Opal二次开发工具与环境配置.docx 光刻软件:Opal二次开发_(13).Opal插件开发.docx 光刻软件:Opal二次开发_(14).Opal自动化脚本编写.docx 光刻软件:Opal二次开发_(15).Opal性能调优与故障排除.docx 光刻软件:Opal二次开发_(16).Opal二次开发最佳实践.docx 光刻软件:Opal二次开发_(17).Opal版本管理与更新.docx 光刻软件:Opal二次开发_(18).Opal二次开发项目管理.docx 光刻软件:Opal二次开发_(19).光刻软件Opal的未来发展趋势.docx 光刻软件:Opal二次开发_(1).Opal软件基础与操作.docx 光刻软件:Opal二次开发_(2).光刻技术概论.docx 光刻软件:Opal二次开发_(3).光刻软件Opal的架构与组件.docx 光刻软件:Opal二次开发_(4).Opal脚本语言基础.docx 光刻软件:Opal二次开发_(5).Opal图形界面开发.docx 光刻软件:Opal二次开发_(6).Opal数据处理与分析.docx 光刻软件:Opal二次开发_(7).Opal仿真与优化.docx 光刻软件:Opal二次开发_(8).Opal与外部软件接口.docx 光刻软件:Opal二次开发_(9).Opal高级功能与技巧.docx
内容概要:本文详细探讨了轮毂电机分布式驱动车辆的状态估计方法,主要集中在扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF)。文中介绍了整车7自由度模型,该模型综合考虑了车辆多个方向的运动特性,为状态估计提供了理论基础。接着分别阐述了EKF和UKF的工作原理及其Python代码实现,展示了两种滤波器在处理非线性问题上的异同。实验结果显示,UKF在高非线性条件下表现更好,但计算成本更高;EKF计算简单,但在某些情况下精度有限。最终,作者强调了这两种方法的选择应根据具体应用场景的需求。 适合人群:从事汽车工程、自动化控制、机器人技术等领域研究的专业人士和技术爱好者。 使用场景及目标:①研究和开发轮毂电机分布式驱动车辆的控制系统;②评估和优化车辆状态估计算法,如车速、质心侧偏角、横摆角速度等;③理解EKF和UKF在非线性系统中的应用特点。 其他说明:文章不仅提供了详细的数学推导和代码实现,还讨论了一些实际应用中的注意事项,如噪声处理、参数调整等。此外,文中提到的7自由度模型和滤波器实现可以作为进一步研究的基础。
数据集介绍:车辆目标检测数据集 一、基础信息 数据集名称:车辆目标检测数据集 图片数量: - 训练集:3,931张 - 验证集:1,126张 - 测试集:563张 - 总计:5,620张道路场景图片 分类类别: - Vehicle(车辆):覆盖多种道路场景下的机动车辆检测 标注格式: YOLO格式标注,包含归一化坐标的边界框信息,适用于目标检测任务 数据特性: 涵盖多角度、多光照条件的车辆目标,包含不同距离尺度的检测样本 二、适用场景 自动驾驶系统开发: 训练车载视觉系统实时检测周围车辆,提升环境感知能力 交通监控分析: 用于智慧城市系统统计道路车辆密度,优化交通流量管理 驾驶辅助系统研发: 集成至ADAS系统实现碰撞预警、车道保持等核心功能 计算机视觉研究: 为车辆检测算法研究提供标准化基准数据集 道路安全系统开发: 支持构建违规驾驶行为检测系统(如违规变道、跟车过近等) 三、数据集优势 专业场景覆盖: 数据采集自真实道路场景,包含城市道路、高速公路等多种环境 标注规范性强: 严格遵循YOLO标注标准,边界框与车辆位置高度吻合 多尺度检测支持: 包含近景特写与远景多目标场景,有效训练模型尺度适应性 算法适配性佳: 原生支持YOLO系列算法,可无缝衔接主流深度学习框架训练流程 工业应用价值: 直接服务于自动驾驶、智慧交通等前沿领域AI模型开发
# 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
内容概要:本文详细介绍了鸿蒙HarmonyOS网络开发中TCP客户端的相关知识和技术实现。首先,文章讲解了TCP协议的基本原理,包括其可靠有序的传输特性、与UDP的区别、三次握手机制和滑动窗口机制。接着,文章阐述了HarmonyOS与TCP客户端的关系,特别是在物联网设备通信、即时通讯应用和数据传输安全方面的应用。随后,文章逐步引导读者搭建HarmonyOS开发环境,申请网络权限,并通过创建项目、导入模块、绑定端口、连接服务端、发送与接收消息等步骤,实现了TCP客户端的基本功能。最后,文章展示了通过一个具体的TCP通讯示例应用,从界面设计到功能实现的全过程,并讨论了常见问题及其解决方案。; 适合人群:具备一定编程基础,尤其是对网络编程和HarmonyOS开发感兴趣的开发者。; 使用场景及目标:①了解TCP协议的工作原理及其与UDP的区别;②掌握HarmonyOS开发环境的搭建和网络权限的申请;③学习TCP客户端的开发流程,包括创建项目、编写核心代码和实现消息收发功能;④解决开发过程中常见的连接失败和数据收发异常问题。; 其他说明:本文不仅提供了详细的理论知识,还通过实际案例帮助读者更好地理解和掌握TCP客户端开发的技术要点。对于希望深入了解HarmonyOS网络开发的开发者来说,本文是一份非常有价值的参考资料。
# 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
踏入智慧校园的新时代,一场科技与教育的深度融合正在悄然上演。本方案以大数据、云计算、AI等前沿技术为基石,为校园管理带来前所未有的变革与便捷。 一、一键智控,校园管理轻松升级 想象一下,只需轻点手机,就能实现校园的全面智控。从教学教务到行政后勤,从师生考勤到校园安全,智慧校园解决方案一网打尽。通过构建统一的数据中台,实现各系统间的无缝对接与数据共享,让繁琐的管理工作变得轻松高效。智能排课、自动考勤、在线审批……一系列智能应用让校园管理如虎添翼,让校长和老师们从繁琐的事务中解放出来,专注于教学创新与质量提升。 二、寓教于乐,学习生活趣味无穷 智慧校园不仅让管理变得更简单,更让学习生活变得趣味无穷。AI赋能的教学系统能根据学生的学习习惯和能力,提供个性化的学习路径与资源推荐,让学习变得更加高效有趣。同时,丰富的课外活动与社团管理模块,让孩子们的课余生活也充满了欢声笑语。从智慧班牌到智能录播,从家校共育到虚拟实验室,智慧校园让每一个角落都充满了探索的乐趣与知识的光芒。 三、安全守护,校园生活无忧无虑 在智慧校园的守护下,校园生活变得更加安全无忧。通过高清视频监控、智能预警系统与人脸识别技术,校园安全得到了全方位保障。无论是外来人员的入侵还是学生的异常行为,都能被及时发现并处理。同时,智能化的健康管理系统还能实时监测师生的健康状况,为校园防疫工作提供有力支持。智慧校园,用科技的力量为每一位师生筑起了一道坚实的安全防线,让校园生活更加安心、舒心。
内容概要:本文详细介绍了使用西门子200Smart PLC和威纶通触摸屏搭建电子凸轮相对运动控制系统的方法。主要内容涵盖硬件配置、PLC程序核心逻辑(如初始化脉冲输出、加减速曲线分段、方向控制)、触摸屏操作以及常见问题及其解决方案。文中还特别强调了调试过程中遇到的实际问题及解决方法,确保系统的稳定性和可靠性。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程和电子凸轮控制有一定基础的人群。 使用场景及目标:适用于需要实现精确电机控制的应用场合,如生产线上的物料搬运、包装机械等。目标是帮助读者掌握如何利用现有硬件资源构建高效稳定的电子凸轮控制系统。 其他说明:文章提供了丰富的实战经验分享,包括硬件选型、软件编程技巧、故障排查等方面的内容,有助于提高读者的实际操作能力。
Outlook新邮件到达时不显示通知
# 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;