当前位置: 首页 > news >正文

电商专业学什么长沙seo优化排名

电商专业学什么,长沙seo优化排名,asp.net企业网站管理系统,推广赚钱的项目本篇文章来自于2018年12月22日举办的《阿里云栖开发者沙龙—Java技术专场》#xff0c;杜万专家是该专场第四位演讲的嘉宾#xff0c;本篇文章是根据杜万专家在《阿里云栖开发者沙龙—Java技术专场》的演讲视频以及PPT整理而成。 摘要#xff1a;响应式宣言如何解读#xf…本篇文章来自于2018年12月22日举办的《阿里云栖开发者沙龙—Java技术专场》杜万专家是该专场第四位演讲的嘉宾本篇文章是根据杜万专家在《阿里云栖开发者沙龙—Java技术专场》的演讲视频以及PPT整理而成。 摘要响应式宣言如何解读Java中如何进行响应式编程Reactor Streams又该如何使用热衷于整合框架与开发工具的阿里云技术专家杜万为大家全面解读响应式编程分享Spring Webflux的实践。从响应式理解到Reactor项目示例再到Spring Webflux框架解读本文带你进入Java响应式编程。 演讲嘉宾简介杜万倚贤阿里云技术专家全栈工程师从事了12年 Java 语言为主的软件开发工作热衷于整合框架与开发工具Linux拥趸问题终结者。合作翻译《Elixir 程序设计》。目前负责阿里云函数计算的工具链开发正在实践 WebFlux 和 Reactor 开发新的 Web 应用。 本次直播视频精彩回顾戳这里https://yq.aliyun.com/live/721PPT下载地址https://yq.aliyun.com/download/3187以下内容根据演讲嘉宾视频分享以及PPT整理而成。 本文围绕以下三部分进行介绍 1.Reactive 2.Project Reactor 3.Spring Webflux 一Reactive1.Reactive Manifesto 下图是Reactive Manifesto官方网站上的介绍这篇文章非常短但也非常精悍非常值得大家去认真阅读。 响应式宣言是一份构建现代云扩展架构的处方。这个框架主要使用消息驱动的方法来构建系统在形式上可以达到弹性和韧性最后可以产生响应性的价值。所谓弹性和韧性通俗来说就像是橡皮筋弹性是指橡皮筋可以拉长而韧性指在拉长后可以缩回原样。这里为大家一一解读其中的关键词1响应性快速/一致的响应时间。假设在有500个并发操作时响应时间为1s那么并发操作增长至5万时响应时间也应控制在1s左右。快速一致的响应时间才能给予用户信心是系统设计的追求。2韧性复制/遏制/隔绝/委托。当某个模块出现问题时需要将这个问题控制在一定范围内这便需要使用隔绝的技术避免连锁性问题的发生。或是将出现故障部分的任务委托给其他模块。韧性主要是系统对错误的容忍。3弹性无竞争点或中心瓶颈/分片/扩展。如果没有状态的话就进行水平扩展如果存在状态就使用分片技术将数据分至不同的机器上。4消息驱动异步/松耦合/隔绝/地址透明/错误作为消息/背压/无阻塞。消息驱动是实现上述三项的技术支撑。其中地址透明有很多方法。例如DNS提供的一串人类能读懂的地址而不是IP这是一种不依赖于实现而依赖于声明的设计。再例如k8s每个service后会有多个Pod依赖一个虚拟的服务而不是某一个真实的实例从何实现调用1 个或调用n个服务实例对于对调用方无感知这是为分片或扩展做了准备。错误作为消息这在Java中是不太常见的Java中通常将错误直接作为异常抛出而在响应式中错误也是一种消息和普通消息地位一致这和JavaScript中的Promise类似。背压是指当上游向下游推送数据时可能下游承受能力不足导致问题一个经典的比喻是就像用消防水龙头解渴。因此下游需要向上游声明每次只能接受大约多少量的数据当接受完毕再次向上游申请数据传输。这便转换成是下游向上游申请数据而不是上游向下游推送数据。无阻塞是通过no-blocking IO提供更高的多线程切换效率。 2.Reactive Programming 响应式编程是一种声明式编程范型。下图中左侧显示了一个命令式编程相信大家都比较熟悉。先声明两个变量然后进行赋值让两个变量相加得到相加的结果。但接着当修改了最早声明的两个变量的值后sum的值不会因此产生变化。而在Java 9 Flow中按相同的思路实现上述处理流程当初始变量的值变化最后结果的值也同步发生变化这就是响应式编程。这相当于声明了一个公式输出值会随着输入值而同步变化。 响应式编程也是一种非阻塞的异步编程。下图是用reactor.ipc.netty实现的TCP通信。常见的server中会用循环发数据后在循环外取出但在下图的实现中没有因为这不是使用阻塞模型实现是基于非阻塞的异步编程实现。 响应式编程是一种数据流编程关注于数据流而不是控制流。下图中首先当页面出现点击操作时产生一个click stream然后页面会将250ms内的clickStream缓存如此实现了一个归组过程。然后再进行map操作得到每个list的长度筛选出长度大于2的这便可以得出多次点击操作的流。这种方法应用非常广泛例如可以筛选出双击操作。由此可见这种编程方式是一种数据流编程而不是if else的控制流编程。 之前有提及消息驱动那么消息驱动Message-driven和事件驱动Event-driven有什么区别呢。1消息驱动有确定的目标一定会有消息的接受者而事件驱动是一件事情希望被观察到观察者是谁无关紧要。消息驱动系统关注消息的接受者事件驱动系统关注事件源。2在一个使用响应式编程实现的响应式系统中消息擅长于通讯事件擅长于反应事实。3.Reactive Streams Reactive Streams提供了一套非阻塞背压的异步流处理标准主要应用在JVM、JavaScript和网络协议工作中。通俗来说它定义了一套响应式编程的标准。在Java中有4个Reactive Streams API如下图所示 这个API中定义了Publisher即事件的发生源它只有一个subscribe方法。其中的Subscriber就是订阅消息的对象。 作为订阅者有四个方法。onSubscribe会在每次接收消息时调用得到的数据都会经过onNext方法。onError方法会在出现问题时调用Throwable即是出现的错误消息。在结束时调用onComplete方法。 Subscription接口用来描述每个订阅的消息。request方法用来向上游索要指定个数的消息cancel方法用于取消上游的数据推送不再接受消息。 Processor接口继承了Subscriber和Publisher它既是消息的发生者也是消息的订阅者。这是发生者和订阅者间的过渡桥梁负责一些中间转换的处理。 Reactor Library从开始到现在已经历经多代。第0代就是java包Observable 接口也就是观察者模式。具体的发展见下图 第四代虽然仍然是RxJava2但是相比第三代的RxJava2其中的小版本有了不一样的改进出现了新特性。 Reactor Library主要有两点特性。一是基于回调callback-based在事件源附加回调函数并在事件通过数据流链时被调用二是声明式编程Declarative很多函数处理业务类似例如map/filter/fold等这些操作被类库固化后便可以使用声明式方法以在程序中快速便捷使用。在生产者、订阅者都定义后声明式方法便可以用来实现中间处理者。 二Project Reactor Project Reactor实现了完全非阻塞并且基于网络HTTP/TCP/UDP等的背压即数据传输上游为网络层协议时通过远程调用也可以实现背压。同时它还实现了Reactive Streams API和Reactive Extensions以及支持Java 8 functional API/Completable Future/Stream /Duration等各新特性。下图所示为Reactor的一个示例 首先定义了一个words的数组然后使用flatMap做映射再将每个词和s做连接得出的结果和另一个等长的序列进行一个zipWith操作最后打印结果。这和Java 8 Stream非常类似但仍存在一些区别1Stream是pull-based下游从上游拉数据的过程它会有中间操作例如map和reduce和终止操作例如collect等只有在终止操作时才会真正的拉取数据。Reactive是push-based可以先将整个处理数据量构造完成然后向其中填充数据在出口处可以取出转换结果。2Stream只能使用一次因为它是pull-based操作拉取一次之后源头不能更改。但Reactive可以使用多次因为push-based操作像是一个数据加工厂只要填充数据就可以一直产出。3Stream#parallel()使用fork-join并发就是将每一个大任务一直拆分至指定大小颗粒的小任务每个小任务可以在不同的线程中执行这种多线程模型符合了它的多核特性。Reactive使用Event loop用一个单线程不停的做循环每个循环处理有限的数据直至处理完成。 在上例中大家可以看到很多Reactive的操作符例如flatMap/concatWith/zipWith等这样的操作符有300多个这可能是学习这个框架最大的压力。如何理解如此繁多的操作符可能一个归类会有所帮助 1新序列创建例如创建数组类序列等 2现有序列转换将其转换为新的序列例如常见的map操作 3从现有的序列取出某些元素 4序列过滤 5序列异常处理。 6与时间相关的操作例如某个序列是由时间触发器定期发起事件 7序列分割 8序列拉至同步世界不是所有的框架都支持异步再需要和同步操作进行交互时就需要这种处理。 上述300操作符都有如下所示的弹珠图Marble Diagrams用表意的方式解释其作用。例如下图的操作符是指随着时间推移逐个产生了6个元素的序列黑色竖线表示新元素产生终止。在这个操作符的作用下下方只取了前三个元素到第四个元素就不取了。这些弹珠图大家可以自行了解。 三Spring Webflux1.Spring Webflux框架 Spring Boot 2.0相较之前的版本在基于Spring Framework 5的构建添加了新模块Webflux将默认的web服务器改为Netty支持Reactive应用并且Webflux默认运行在Netty上。而Spring Framework 5也有了一些变化。Java版本最低依赖Java 8支持Java 9和Java 10提供许多支持Reactive的基础设施提供面向Netty等运行时环境的适配器新增Webflux模块集成的是Reactor 3.x。下图所示为Webflux的框架 左侧是通常使用的框架通过Servlet API的规范和Container进行交互上一层是Spring-Webmvc再上一层则是经常使用的一些注解。右侧为对应的Webflux层级只要是支持NIO的Container例如TomcatJettyNetty或Undertow都可以实现。在协议层的是HTTP/Reactive Streams。再上一层是Spring-Webflux为了保持兼容性它支持这些常用的注解同时也有一套新的语法规则Router Functions。下图显示了一个调用的实例 在Client端首先创建一个WebClient调用其get方法写入URL接收格式为APPLICATION_STREAM_JSON的数据retrieve获得数据取得数据后用bodyToFlux将数据转换为Car类型的对象在doOnNext中打印构造好的Car对象block方法意思是直到回调函数被执行才可以结束。在Server端在指定的path中进行get操作produces和以前不同这里是application/streamjson然后返回Flux范型的Car对象。传统意义上如果数据中有一万条数据那么便直接返回一万条数据但在这个示例返回的Flux范型中是不包含数据的但在数据库也支持Reactive的情况下request可以一直往下传递响应式的批量返回。传统方式这样的查询很有可能是一个全表遍历这会需要较多资源和时间甚至影响其他任务的执行。而响应式的方法除了可以避免这种情况还可以让用户在第一时间看到数据而不是等待数据采集完毕这在架构体验的完整性上有了很大的提升。application/streamjson也是可以让前端识别出这些数据是分批响应式传递而不会等待传完才显示。 现在的Java web应用可以使用Servlet栈或Reactive栈。Servlet栈已经有很久的使用历史了而现在又增加了更有优势的Reactive栈大家可以尝试实现更好的用户体验。 2.Reactive编程模型 下图中是Spring实现的一个向后兼容模型可以使用annotation来标注Container。这是一个非常清晰、支持非常细节化的模型也非常利于同事间的交流沟通。 下图是一个Functional编程模型通过写函数的方式构造。例如下图中传入一个Request返回Response通过函数的方法重点关注输入输出不需要区分状态。然后将这些函数注册至Route。这个模型和Node.js非常接近也利于使用。 3.Spring Data框架 Spring Data框架支持多种数据库如下图所示最常用的是JPA和JDBC。在实践中不同的语言访问不同的数据库时访问接口是不一样的这对编程人员来说是个很大的工作量。 Spring Data便是做了另一层抽象使你无论使用哪种数据库都可以使用同一个接口。具体特性这里不做详谈。 下图展示了一个Spring Data的使用示例。只需要写一个方法签名然后注解为Query这个方法不需要实现因为框架后台已经采用一些技术直接根据findByFirstnameAndLastname就可以查询到。这种一致的调用方式无疑提供了巨大的方便。 现在Reactive对Spring Data的支持还是不完整的只支持了MongoDB/Redis/Cassandra和Couchbase对JPA/LDAP/Elasticsearch/Neo4j/Solr等还不兼容。但也不是不能使用例如对JDBC数据库将其转为同步即可使用重点在于findAll和async两个函数这里不再展开详述具体代码如下图所示 Reactive不支持JDBC最根本的原因是JDBC不是non-blocking设计。但是现在JavaOne已经在2016年9月宣布了Non-blocking JDBC API的草案虽然还未得到Java 10的支持但可见这已经成为一种趋势。 四总结 Spring MVC框架是一个命令式逻辑方便编写和调试。Spring WebFlux也具有众多优势但调试却不太容易因为它经常需要切换线程执行出现错误的栈可能已经销毁。当然这也是现今Java的编译工具对WebFlux不太友好相信以后会改善。下图中列出了Spring MVC和Spring WebFlux各自的特性及交叉的部分。最后也附上一些参考资料。 原文链接 本文为云栖社区原创内容未经允许不得转载。
http://www.pierceye.com/news/321462/

相关文章:

  • 对电子商务网站建设和管理的理解学网站开发应该学什么软件
  • 建设网站的app英文成品网站模板下载
  • 破解版软件下载网站网站图片处理方案
  • 安徽网站建设方案服务汉中建设工程招标网
  • 网站建设公司企业模板下载阿里巴巴官网国际站
  • icp备案网站信息修改百度小说排行榜总榜
  • 崇明专业网站建设做网站后台要学什么
  • 专门做搜索种子的网站有哪些吉林平台网站建设多少钱
  • seo网站优化案例高端品牌裙子
  • 合肥需要做网站的公司无锡工程建设信息网站
  • 网站服务器有哪几种做招聘网站没有数据
  • 合肥手机网站制作建设自己做视频的网站
  • 公司网站备案名称广东建设项目备案公示网站
  • 网站建设设计维片长治网站建设公司
  • 商务网站建设兴田德润电话多少世界著名网站开发语言
  • 湖北网站建设公司微信手机网站设计
  • 徐州网站制作需要多少钱网站规划设计方案
  • 设计师常用网站门户重庆注册公司流程和费用标准
  • 网站图片太多怎么优化全民推广
  • 湖南做网站 e磐石网络做网站网站盈利会怎么样
  • 网站关闭流程保定风泉网络科技有限公司
  • 学做网站视频工作室网站需要备案吗
  • 个人网站 后台管理咸阳网站建设xymokj
  • 安阳淘宝网站建设保障性租赁住房管理平台
  • 建设银行网站最近都打不开吗在线设计网名生成器
  • 淮滨网站建设公司建设银行有招投标网站吗
  • 岳阳做公司网站可以做司法考试题的网站
  • 深圳做网站联雅asp.net网站很快吗
  • 网站制作公司交接网站网站建设 上海浦东
  • 甘肃省住房和建设厅网站移动网站登录入口