美文网首页
工程师日记20181007

工程师日记20181007

作者: Allen同学 | 来源:发表于2018-10-07 20:28 被阅读0次

    今天聊一聊后台工程师(java初级工程师)的工作日常,微服务还有API。

    导语:哎日常工作不就是增删改查吗!

    其实初级工程师的日常工作还真是增删改查。不过却也没那么简单。谈一下需要做好的工作吧

    1. 接口设计

    2. 代码设计

    API设计其实不是一个简单的活,业界认可的就是restful 规范,其次,就是接口文档。要是你能够定义一套规范的restful 的api,那层次算特别高的了。
    其次,要维护一套文档。
    再者,api是对外的,对内的,就是你的代码结构,一个好的项目就是23种设计模式的有机结合。用好这写设计模式,也是需要时间沉淀的。
    最后,就是微服务的划分。其实微服务的划分这个有点属于架构师的工作范畴了,常见是基于业务领域的服务划分,划分过细的话,分分钟一个保存操作,涉及三四个分布式事务。

    本篇就讨论一下微服务API吧

    一、微服务的API设计

    1.1.思想

    之前领导是一个特别牛逼的偏前端的全栈工程师,那时候,我刚毕业对于一些api的设计理解有点偏,就是有点像是乱开接口。参数类型等等,定义不规范。那时候,给我看了几家他就职过的大厂的接口的demo,引导我那种design在哪种场景更加合适。还有小接口,大接口。

    总结起来就是:

    不是为了一个功能方法而去开放一些需要的接口,而是为了一个功能模块,我们后台需要去开一套维度合适的接口。

    有一个特别快的提升方式,跟一个前端工程师交朋友,每天问他,现在给的接口用起来会不会更爽一点。

    1.2.服务提供者,和消费者

    见过几个厂的微服务架构。其实大同小异。对于服务的提供者和消费者,都有自己的见解。但是在我看过的几个项目,也有跟其他大神讨论过,可以总结出来,大概有两种形式吧:

    1. 提供者既是消费者:
    2. 提供者与消费者分层:

    在这里得讲两个概念,外部接口,内部接口。

    外部接口其实没啥可解释的。

    内部接口,就是提供给其他微服务的接口,可以理解为service层的远程实现,一般来说,是不对外开放。

    服务提供者,就可以理解为是平时单机架构里面的service层,

    而消费者,就是调用一或多个service,进行业务逻辑操作,在某厂称为business层。

    消费者开的是外部接口,提供者开的是内部接口。

    在下面的项目里面,其实就是提供者既是消费者,但是,我在zuul里面没有做控制而已。

    1.3.微服务的API以及接口

    对于服务的消费者,一般写的API,都是要遵循restful规范。

    对于服务的提供者,我感觉,把他看成一个用http协议的远程接口就OK了,如果要用restful规范,会失去一定的灵活性(在做接口设计的时候是可以体会得到的)。
    从两个维度说吧:

    1. 框架方面

    比如说,阿里的dubbo,新浪的motan,的服务提供者都是RPC框架实现的。你说要基于restful 吗?

    1. 其他方面(分布式事务等)

    先普及一下分布式事务:

    一般来说,微服务架构,多数使用的是柔性事务(基于业务代码的事务,不是基于资源的事务)有三种:

    1. 基于消息的最终一致性事务
    2. TCC事务
    3. 最大努力通知型事务

    比如说,一个提供者接受到一个请求,需要跨服务保存操作。这样就涉及到分布式事务,使用消息的最终一致性事务的话,是发一条消息过去,而用TCC的话,一个保存操作又有了一个取消接口,确认接口。一个服务提供者,写的接口也要遵循 restful design的话,******,所以说,不要太较真,物极必反。

    接口校验

    其实过滤器是公司统一的,其次就是一些接口校验了。其实也没啥好说的。一般@Vaild校验的都是格式,长度,大小之类的。判空的一般会在Controller里面的业务逻辑里面做。

    异常处理

    其实更准确的来说,是状态码。
    状态码处理的话主要分两种,一种是消费者的,一种是提供者的。
    消费者的状态码:
    其实就是给前端的状态码,比如说,有时候,你点击一个按钮,显示,服务器繁忙请稍后再试,很多时候,前端显示的提示信息,都是根据后台给的状态码,还有信息显示的。
    提供者的状态码:
    在Spring Cloud中,可以理解为Feign Client调用服务失败,要怎么处理,比如说,你去调一另外一个服务查询,返回500,其实可能有时候,那个服务当掉了,这时候,你重试,再去调一次(基于负载均衡,调的是另外一台服务器)可能就OK了,但是,如果,返回个不存在,这时候你重试是没有意义的。

    最后上代码

    allen-api-demo用到了 SPRING MVC + SWAGGER + OAUTH

    水平有限,只是写了一些API文档的维护,校验,异常处理,接口权限,返回视图的简要使用方式。

    再来一个今年一月多写的

    flexible-transaction-event-demo 基于消息的最终一致性事务

    TCC的,看了挺多设计方法,也有再加一个事务的协调者的。后面再慢慢分享出来吧。

    结语
    自己的学习路程是先打好基础,然后分课题学习。我觉得大概我研究完这几个课题应该就有中级工程师水准了

    • 软件工程
    • API设计
    • 分布式事务
    • 消息中间件
    • 数据库
    • 设计模式

    自己研究的比较好的课题是API设计,然后自己花的最多时间去吃的是分布式事务。再者,

    相关文章

      网友评论

          本文标题:工程师日记20181007

          本文链接:https://www.haomeiwen.com/subject/kdlraftx.html