JAVA设计模式有哪些 java前后端分离的项目是前端更需要理解业务,还是后端更需要理解业务?

[更新]
·
·
分类:互联网
1855 阅读

JAVA设计模式有哪些

java前后端分离的项目是前端更需要理解业务,还是后端更需要理解业务?

java前后端分离的项目是前端更需要理解业务,还是后端更需要理解业务?

前后端分离的项目,后端更需要了解业务。
首先,后端需要存储项目需要的数据,需要设计数据库。这就必须充分的完全的了解业务,细致到每一个字段。反过来说,数据库设计其实是对系统功能的一种数据抽象,在设计数据库的同时,也会迫使后端了解一遍业务。
其次,后端需要给前端提供数据接口。接口设计也会迫使后端去熟悉一遍业务,每提供一个接口,就是深入了解一块业务的过程。另外,再加上对系统性能的考虑,还会针对业务进行系统性能优化,这些都必须是在保证业务需求下完成的。不符合业务需求的系统设计不就是耍流氓吗?
最后,也是一个优秀后端的表现。那就是后端在提供接口时,需要去想象,或者说是在大脑中模拟用户的页面操作。哪个操作是纯前端操作,不需要接口参与。哪个是数据提交操作,哪个是数据查询操作,都必须了解清楚。一个功能的完成,必须在大脑中模拟出这个功能的完整闭环操作,这样才可以在和前端的配合中如鱼得水,合作愉快。不至于联调阶段手忙脚乱。当然,前端也需要了解业务,这个东西,了解越深入越好!

Java互联网架构-如何设计服务接口API限流功能?

1 限流目的限流目的是对系统进行保护。当访问量激增,超过系统可以承受的流量,则需要把超出的流量挡住,不进行业务逻辑直接返回。
2 预估系统流量上限采用压测方法。对某个接口进行压测,逐步调高并发量和持续时间,达到系统瓶颈时(错误率高,响应时间长)记录下并发量,这个值就是当前系统流量上限。
3 限流方案3.1 系统维度从系统维度来看可以分为单机限流和集群限流两种方式。
单机限流是对每一台机器限流,假设每台机器限流100QPS,集群有10台机器,那么整个集群有1000QPS能力。可以使用Guava RateLimiter、Java并发包Semaphore实现单机限流。
集群限流是对整个集群进行限流,比如预估整个集群能力有1000QPS,还有一种场景是限次,比如整个集群只能调用第三方接口多少次。可以使用Redis实现全局限流。
3.2 方法维度限流常用方法有以下三种:
计数器法维护一个计数器,这个计数器有一个时间窗口,在当前时间窗口,每当一个新请求到来时,计数器自增,当计数器自增达到设置的上限时,不再提供服务。滑动到下一个时间窗口时,计数器重置。这种方法的特点是简单,但是在时间窗口临界点,可能会出现超出流量的问题。
漏桶算法漏桶算法强制一个常量的输出速率而不管输入数据流的突发性。当输入空闲时,该算法不执行任何动作,就像用一个底部开了个洞的漏桶接水一样,水进入到漏桶里,桶里的水通过下面的孔以固定的速率流出。当水流入速度过大会直接溢出。
令牌桶算法我推荐这种方法。一个容量固定的桶,以一个恒定的速率产生令牌,如果桶内的令牌满了则多余的令牌会被丢弃。每当请求进来时,先去桶内拿一个令牌,桶内的令牌拿完了,则必须等待桶内产生令牌才能允许后续的请求(或者直接拒绝)。由于桶内可以堆积一定的令牌(一般为桶容量),所以令牌桶算法优点是可以允许一定量的流量高峰。
Guava提供了限流工具RateLimiter基于令牌桶完成限流。也可以通过编写Lua脚本通过Redis实现全局令牌桶。