目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

Consul

Consul  “Consul is a distributed, highly available, and data center aware solution to connect and confifigure applications across dynamic, distributed infrastructure.” - Reference 关键特性 服务发现 健康检查 KV 存储 多数据中心支持 安全的服务间通信(以加密的方式完成应用间的交互) 使用 Consul 提供服务发现能力 HTTP API (以HTTP的方式做服务的注册于发现,类似Eurak) DNS( xxx.service.consul ) 与 Nginx 联动,比如 ngx_http_consul_backend_module 通过 Docker 启动 Consul docker pull consul docker run --name consul -d -p 8500:8500 -p 8600:8600/udp consul Provider 端 依赖 <dependency&....

Spring Cloud & Cloud Native 概述

简单理解微服务  “微服务就是⼀些协同工作的小而自治的服务。” – Sam Newman 小:相对于单体服务。 自治:相对内聚性更强。 微服务的优点 易购性:语言、存储…… 弹性:一个组件不可用,不会导致级联故障。 扩展:单体服务不易扩展,多个较小的服务可以按需做横向扩展。(细粒度扩容性能瓶颈的服务) 易于部署 与组织结构对齐(每个服务对应独立的团队,职责更加清晰分明) 可组合性(整个业务链路是由多个微服务相互配合完成) 可替代性(升级改造时,可以用一个服务代替另外一个服务) 实施微服务的代价 没有银弹!!! 分布式系统的复杂性(分布式系统之间的事务、最终一致性等……) 开发、测试等诸多研发过程中的复杂性 部署、监控等诸多运维复杂性 如何理解云原生  “云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。” – CNCF Cloud Native Defifinition v1.0 云原生应用要求 DevOps:开发与运维一同致力于交付高品质的软件服务于客户 *持续交付:软件的构建、测试和发布,要更快、更频繁、更稳定 微服务:以⼀....

Online Education Website

中大型公司项目开发流程 需求评审(产品/设计/前端/后端/测试/运营) ->UI 设计 -> 开发(前端架构-> 开发/ 后端架构-> 开发) -> 前端后端联调 -> 项目提测 ->BugFix -> 回归测试 -> 运维和开发部署上线 -> 灰度发布 -> 全量发布 -> 维护和运营 需求分析和架构设计 功能需求 首页视频列表 视频详情 (自己开发) 微信扫码登录 下单微信支付 我的订单列表 (自己开发) 架构设计 前端后端分离 -> 方案:node 渲染 动静分离 -> 方案:静态资源如 HTML,js 放在 cdn 或者 nginx 服务器上 后端技术选择:IDEA + Springboot2.0 + redis4.0+ HttpClient + MySQL + ActiveMQ 消息队列 前端技术选择:HTML5 + bootstrapt + jQuery 测试要求:首页和视频详情页 qps 单机 qps 要求 2000+ 数据库设计 实体对象:矩形 属性:椭圆 关系:菱形 实体....

分布式环境中如何解决Session的问题

常见的会话解决方案 粘性会话 : Sticky Session (任意节点故障引发请求重定向到其他节点的无法获取到原有 Session) 会话复制 : Session Replication (复制成本递增) 集中会话 : Centralized Session Spring Session 简化集群中的用户会话管理 无需绑定容器特定解决方案 支持的存储 Redis MongoDB JDBC Hazelcast 实现原理  通过定制的 HttpServletRequest 返回定制的 HttpSession。 SessionRepositoryRequestWrapper SessionRepositoryFilter DelegatingFilterProxy 基于 Redis 的 HttpSession 基本配置 @EnableRedisHttpSession 提供 RedisConnectionFactory 实现 AbstractHttpSessionApplicationInitializer SpringBoot 对 Spring Session 的支持....

RESTful Web Service

REST  REST 提供了一组架构约束(风格),当作为一个整体来应用时,强调组件交互的可伸缩性、接口的通用性、组件的独立部署、以及用来减少交互延迟、增强安全性、封装遗留系统的中间组件。 Richardson 成熟度模型  Richardson 服务成熟度模型是基于一个服务对于 URI,HTTP 和超媒体的支持,划分出服务成熟度的三个级别 + 零级(即:没有任何支持)。他以一种服务实现者容易理解的方式,将通用的架构模式映射到服务的设计。 如何实现 RESTFul Web Service 识别资源 选择合适的资源粒度 设计 URI 选择合适的 HTTP 方法和返回码 设计资源的表述 识别资源 找到领域名词:能用 CRUD 操作的名词 将资源组织为集合(即集合资源) 将资源合并为符合资源 计算或处理函数 资源粒度 站在服务端的角度,要考虑 网络效率 表述的多少 客户端的易用程度 站在客户端的角度,要考虑 可缓存性 修改频率 可变性 构建更好的 URI 使用域及子域对资源进行合理的分组或划分 在 URI 的路径部分使用斜杠分隔符 ( / ) 来表示资源之间的层次关系 在 ....

访问 Web 资源:RestTemplate 、WebClient

通过 RestTemplate 访问 Web 资源  Spring Boot 中没有自动配置 RestTemplate;  Spring Boot 提供了 RestTemplateBuilder:RestTemplateBuilder.build() 常用方法 GET 请求: getForObject() / getForEntity() POST 请求: postForObject() / postForEntity() PUT 请求: put() DELETE 请求: delete() 构造 URI 构造 URI: UriComponentsBuilder 构造相对于当前请求的 URI: ServletUriComponentsBuilder 构造指向 Controller 的 URI: MvcUriComponentsBuilder 示例 Coffee package geektime.spring.springbucks.customer.model; import lombok.AllArgsConstructor; import lombok.Builder; im....

Spring MVC

认识 Spring MVC DispatcherServlet (核心、也是所有请求的入口) Controller:业务处理逻辑 xxxResolver:解析器 ViewResolver HandlerExceptionResolver MultipartResolver HandlerMapping:Request 与 Controller 的映射。 Spring MVC 中的常用注解 @Controller @RestController :@Controller + @RequestBody。 @RequestMapping:此 Controller 要处理哪些请求。 @GetMapping @PostMapping @PutMapping @DeleteMapping @RequestBody:请求报文体 @ResponseBody:响应报文体 @ResponseStatus:响应状态码 定义一个简单的 Controller CoffeeController package geektime.spring.springbucks.waiter.control....