发表于: 2018-05-19 23:34:17

0 1252


今天完成的任务:

任务总结

任务八任务总结:

任务名称:java=TASK8

成果链接:https://github.com/IT-xzy/Task/tree/master/Java/likefei/task8-master

www.ayase.tech/home

任务耗时:2018.5.12-2018.5.15 共4天

技能脑图:

官方脑图:

任务总结:

a.是否符合预期及解决办法:

符合预期

b.脑图总结:

spring-cloud还需要再了解一下

c.任务总结:

任务八做的很头疼,java-rmi理解起来有点困难、socekt传输掌握的也不好,在随机service的时候很迷茫不知道该怎么做、最后想到了一个不停的取bean然后捕获异常。然后不断完善加了flag机制和定制任务清除flag让代码更完善,但是由于最基础的方法很low所以还是效率不高,但是任务目标还是完成了。

收获:

spring的定时任务,自己独立解决并且完善代码的能力,spring的工厂模式


深度思考:

1.什么是rmi?为什么要使用rmi框架?

remote、method、invocation,远程方法调用。

我们常说的rmi是javarmi,但是实际上rmi与javarmi是有区别的,与RPC最大区别在于使用了面向对象的概念,那么在远程调用时可以把对象应用作为参数传递,它的实现最典型的就是Java RMI,但不限于Java RMI。

javarmi仅限于java语言,在通过声明的DNS传递信息后,服务端生成一个接口的实现类的stub,然后将此stub通过TCP/IP建立的socket传给客户端,客户端的stub称为存根,然后每次在客户端调用接口中的方法的时候实际上都是调用了stub,此stub会调用服务端的stub,然后通过skeleton(JAVA1.2之后就不需要这步了)调用service中的真实方法,然后将结果传回去,注意这期间所有传输的对象都需要经过序列化。

使用rmi框架可以分离service和controller,分在不同服务器应该可以减少压力吧。

RMI是基于JAVA语言的,也就是说在RMI技术框架的描述中,只有Server端使用的是JAVA语言并且Client端也是用的JAVA语言,才能使用RMI技术(目前在codeproject.com中有一个开源项目名字叫做“RMI for C++”,可以实现JAVA To C++的RMI调用。但是这是一个第三方的实现,并不是java的标准RMI框架定义,所以并不在我们的讨论范围中)。RMI适用于两个系统都主要使用JAVA语言进行构造,不需要考虑跨语言支持的情况。并且对两个JAVA系统的通讯速度有要求的情况。

RMI 是一个良好的、特殊的RPC实现:使用JRMP协议承载数据描述,可以使用BIO和NIO两种IO通信模型。RMI框架是可以在大规模集群系统中使用的,当然是不是使用RMI技术,还要看您的产品的技术背景、团队的技术背景、公司的业务背景甚至客户的非技术背景等。


2.什么是SCA?什么是分布式?分布式有什么优点?

服务组件体系结构 (SCA) 是一个规范,它描述用于使用 SOA 构建应用程序和系统的模型。它可简化使用 SOA 进行的应用程序开发和实现工作。

面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。

实际上就是我们所说的面向接口编程,但是此接口可以被远程调用,SCA就是用来管理我们这种SOA的,SCA 可简化使用 SOA 构建的业务应用程序的创建和集成。SCA 提供了构建粗粒度组件的机制,这些粗粒度组件由细粒度组件组装而成。SCA 将传统中间件编程从业务逻辑分离出来,从而使程序员免受其复杂性的困扰。它允许开发人员集中精力编写业务逻辑,而不必将大量的时间花费在更为底层的技术实现上。


分布式结构就是将一个完整的系统,按照业务功能,拆分成一个个独立的子系统,在分布式结构中,每个子系统就被称为“服务”。这些子系统能够独立运行在web容器中,它们之间通过RPC方式通信。

举个例子,假设需要开发一个在线商城。按照微服务的思想,我们需要按照功能模块拆分成多个独立的服务,如:用户服务、产品服务、订单服务、后台管理服务、数据分析服务等等。这一个个服务都是一个个独立的项目,可以独立运行。如果服务之间有依赖关系,那么通过RPC方式调用。

这样的好处有很多:

  1. 系统之间的耦合度大大降低,可以独立开发、独立部署、独立测试,系统与系统之间的边界非常明确,排错也变得相当容易,开发效率大大提升。
  2. 系统之间的耦合度降低,从而系统更易于扩展。我们可以针对性地扩展某些服务。假设这个商城要搞一次大促,下单量可能会大大提升,因此我们可以针对性地提升订单系统、产品系统的节点数量,而对于后台管理系统、数据分析系统而言,节点数量维持原有水平即可。
  3. 服务的复用性更高。比如,当我们将用户系统作为单独的服务后,该公司所有的产品都可以使用该系统作为用户系统,无需重复开发。


3.为什么要把web和service分离?应用了哪些概念?

解耦合、方便拓展服务,分布式。


今天遇到的问题:

感觉自己太急于求成了,想学太多知识但是都是皮毛却没有实际掌握原理,调整一波心态

今天的收获:

在弄shiro,配合文章看源码,securitymanager继承了sessionmanager,并且将session的验证交给sessionsecuritymanager管理,session存储我们的权限信息,而在集群系统不同域意味着不同的session,这时就需要一个中间数据库(缓存工具)来存储我们的session,实现session的共享,这里涉及到了spring的抽象cache接口,理解是真的费劲,但是起码知道了sessionDAO是用来实际操作session的,比如应用redis中的set、get方法,然后我们还需要一个实现cache接口来达到共享的目的,还有一个CacheManager操作redis缓存,还是多看文章才能理解这些复杂结构啊。

明天的计划:

重新看自己的任务9,问题很大,重新做吧。



返回列表 返回列表
评论

    分享到