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

如何建设一个公众号电影网站成都手机微信网站建设报价

如何建设一个公众号电影网站,成都手机微信网站建设报价,网页设计策划,产品详情页模板免费下载#x1f680; 博主介绍#xff1a;大家好#xff0c;我是无休居士#xff01;一枚任职于一线Top3互联网大厂的Java开发工程师#xff01; #x1f680; #x1f31f; 在这里#xff0c;你将找到通往Java技术大门的钥匙。作为一个爱敲代码技术人#xff0c;我不仅热衷… 博主介绍大家好我是无休居士一枚任职于一线Top3互联网大厂的Java开发工程师 在这里你将找到通往Java技术大门的钥匙。作为一个爱敲代码技术人我不仅热衷于探索一些框架源码和算法技巧奥秘还乐于分享这些宝贵的知识和经验。 无论你是刚刚踏入编程世界的新人还是希望进一步提升自己的资深开发者在这里都能找到适合你的内容。我们共同探讨技术难题一起进步携手度过互联网行业的每一个挑战。 如果你觉得我的文章对你有帮助请不要吝啬你的点赞分享和评论哦 让我们一起打造一个充满正能量的技术社区吧 目录标题 1 引言 2 什么是RPC接口预热2.1 定义2.2 重要性 3 接口预热的实现原理3.1 服务注册与发现3.2 健康检查3.3 流量控制3.4 预热标记 4 接口预热的实现步骤4.1 服务启动4.2 设置预热标记4.3 接口预热4.4 健康检查4.5 清除预热标记4.6 流量控制4.7 监控与报警 5 无损实现5.1 无损预热的关键点5.2 无损预热的实现步骤 6 总结 1 引言 在分布式系统中RPCRemote Procedure Call远程过程调用框架是实现服务间通信的重要工具。服务启动后立即接收大量流量可能会导致性能问题或服务不可用。因此RPC框架通常会实现接口预热机制确保服务在正式接收流量之前已经达到了最佳运行状态。本文将详细讲解Java RPC框架的接口预热原理及其无损实现帮助你更好地理解和应用这一机制。 2 什么是RPC接口预热 2.1 定义 RPC接口预热是指在服务启动后通过一系列的操作使服务的接口达到最佳的运行状态从而提高系统的稳定性和性能。预热的主要目的是确保服务在正式接收流量之前已经完成了所有的初始化工作避免因为初始化不充分导致的服务不可用或性能下降。 2.2 重要性 提高系统稳定性预热可以确保服务在启动初期就进入最佳状态减少因初始化不充分导致的错误。优化性能通过预热可以提前加载必要的资源减少首次请求的响应时间提升用户体验。负载均衡预热可以帮助负载均衡器更准确地评估各个节点的健康状态合理分配流量。 3 接口预热的实现原理 3.1 服务注册与发现 服务注册服务启动后向服务注册中心注册自身的信息包括IP地址、端口号等。健康状态上报服务启动后定期向服务注册中心上报自身的健康状态。服务发现客户端通过服务注册中心获取健康的服务列表进行请求。 3.2 健康检查 心跳检测通过定期发送心跳包检测服务的健康状态。状态报告服务启动后向监控系统报告自身的状态包括CPU、内存、磁盘使用情况等。接口测试调用服务的关键接口验证接口的可用性。 3.3 流量控制 限流在预热阶段可以设置较低的QPS每秒查询率逐步增加流量确保服务能够平稳过渡到高负载状态。熔断如果在预热过程中发现服务异常立即触发熔断机制停止流量的进一步流入。 3.4 预热标记 预热标记服务启动后设置一个预热标记表示服务正在预热中。预热完成当预热完成后清除预热标记表示服务已经准备好。流量控制负载均衡器和客户端在调度流量时会检查节点的预热标记只将流量分配到预热完成的节点。 4 接口预热的实现步骤 4.1 服务启动 基础初始化启动服务执行基础的初始化操作如读取配置文件、初始化日志系统等。SpringBootApplication public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);} }4.2 设置预热标记 预热标记在服务启动后设置一个预热标记表示服务正在预热中。# application.properties preheattrue4.3 接口预热 调用关键接口在预热阶段调用服务的关键接口验证接口的可用性。Component public class PreheatRunner implements ApplicationRunner {Autowiredprivate RestTemplate restTemplate;Value(${service.url})private String serviceUrl;Value(${preheat})private boolean isPreheating;Autowiredprivate Environment environment;Overridepublic void run(ApplicationArguments args) throws Exception {if (isPreheating) {// 调用关键接口进行预热ResponseEntityString response restTemplate.getForEntity(serviceUrl /health, String.class);if (response.getStatusCode().is2xxSuccessful()) {logger.info(Preheat completed, key interfaces are available.);// 清除预热标记ConfigurableEnvironment configurableEnvironment (ConfigurableEnvironment) environment;configurableEnvironment.getPropertySources().remove(preheat);System.setProperty(preheat, false);logger.info(Preheat completed, ready to receive traffic.);} else {logger.error(Health check failed, preheat not completed.);}}} }4.4 健康检查 心跳检测通过定期发送心跳包检测服务的健康状态。 Component public class HeartbeatTask {Value(${service.url})private String serviceUrl;Scheduled(fixedRate 10000) // 每10秒执行一次public void heartbeat() {try {ResponseEntityString response restTemplate.getForEntity(serviceUrl /health, String.class);if (response.getStatusCode().is2xxSuccessful()) {logger.info(Heartbeat successful.);} else {logger.warn(Heartbeat failed.);}} catch (Exception e) {logger.error(Heartbeat error: e.getMessage());}} }状态报告服务启动后向监控系统报告自身的状态包括CPU、内存、磁盘使用情况等。 RestController public class HealthController {GetMapping(/health)public MapString, String health() {MapString, String healthMap new HashMap();healthMap.put(status, UP);healthMap.put(cpu, getCpuUsage());healthMap.put(memory, getMemoryUsage());healthMap.put(disk, getDiskUsage());return healthMap;}private String getCpuUsage() {// 获取CPU使用情况return 0.1; // 示例值}private String getMemoryUsage() {// 获取内存使用情况return 0.2; // 示例值}private String getDiskUsage() {// 获取磁盘使用情况return 0.3; // 示例值} }4.5 清除预热标记 预热完成当预热完成后清除预热标记表示服务已经准备好。Component public class PreheatRunner implements ApplicationRunner {Autowiredprivate RestTemplate restTemplate;Value(${service.url})private String serviceUrl;Value(${preheat})private boolean isPreheating;Autowiredprivate Environment environment;Overridepublic void run(ApplicationArguments args) throws Exception {if (isPreheating) {// 调用关键接口进行预热ResponseEntityString response restTemplate.getForEntity(serviceUrl /health, String.class);if (response.getStatusCode().is2xxSuccessful()) {logger.info(Preheat completed, key interfaces are available.);// 清除预热标记ConfigurableEnvironment configurableEnvironment (ConfigurableEnvironment) environment;configurableEnvironment.getPropertySources().remove(preheat);System.setProperty(preheat, false);logger.info(Preheat completed, ready to receive traffic.);} else {logger.error(Health check failed, preheat not completed.);}}} }4.6 流量控制 限流设置限流策略逐步增加流量确保服务平稳过渡到高负载状态。 Configuration public class RateLimiterConfig {Beanpublic RateLimiter rateLimiter() {return RateLimiter.create(1.0); // 每秒1个请求}Beanpublic FilterRegistrationBeanRateLimitFilter rateLimitFilter(RateLimiter rateLimiter) {FilterRegistrationBeanRateLimitFilter registrationBean new FilterRegistrationBean();registrationBean.setFilter(new RateLimitFilter(rateLimiter));registrationBean.addUrlPatterns(/*);registrationBean.setOrder(1);return registrationBean;} }public class RateLimitFilter implements Filter {private final RateLimiter rateLimiter;public RateLimitFilter(RateLimiter rateLimiter) {this.rateLimiter rateLimiter;}Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {if (rateLimiter.tryAcquire()) {chain.doFilter(request, response);} else {HttpServletResponse httpResponse (HttpServletResponse) response;httpResponse.setStatus(HttpStatus.TOO_MANY_REQUESTS.value());httpResponse.getWriter().write(Too many requests);}} }熔断如果在预热过程中发现服务异常立即触发熔断机制停止流量的进一步流入。 Configuration public class CircuitBreakerConfig {Beanpublic CircuitBreakerFactory circuitBreakerFactory() {Resilience4JCircuitBreakerFactory circuitBreakerFactory new Resilience4JCircuitBreakerFactory();circuitBreakerFactory.configureDefault(id - CircuitBreakerConfig.custom().slidingWindowType(CircuitBreakerConfig.SlidingWindowType.COUNT_BASED).slidingWindowSize(10).minimumNumberOfCalls(5).failureRateThreshold(50).waitDurationInOpenState(Duration.ofMillis(1000)).permittedNumberOfCallsInHalfOpenState(3).build());return circuitBreakerFactory;} }RestController public class MyController {Autowiredprivate CircuitBreakerFactory circuitBreakerFactory;GetMapping(/data)public String getData() {CircuitBreaker circuitBreaker circuitBreakerFactory.create(myCircuitBreaker);return circuitBreaker.run(() - {// 调用远程服务return restTemplate.getForObject(http://remote-service/data, String.class);}, throwable - Fallback data);} }4.7 监控与报警 持续监控在整个预热过程中持续监控服务的状态如有异常立即报警。 Configuration public class PrometheusConfig {Beanpublic MeterRegistryCustomizerMeterRegistry metricsCommonTags() {return registry - registry.config().commonTags(application, my-app);} }RestController public class MetricsController {Autowiredprivate MeterRegistry meterRegistry;GetMapping(/metrics)public MapString, Object metrics() {MapString, Object metricsMap new HashMap();meterRegistry.forEachMeter(meter - {metricsMap.put(meter.getId().getName(), meter.measure().get(0).getValue());});return metricsMap;} }报警工具使用报警工具如Alertmanager、Email、SMS。 # alertmanager.yml global:resolve_timeout: 5mroute:group_by: [alertname]group_wait: 30sgroup_interval: 5mrepeat_interval: 1hreceiver: emailreceivers:- name: emailemail_configs:- to: your-emailexample.comfrom: alertmanagerexample.comsmarthost: smtp.example.com:587auth_username: alertmanagerauth_password: password5 无损实现 5.1 无损预热的关键点 平滑过渡在预热阶段逐步增加流量确保服务能够平稳过渡到高负载状态。熔断机制如果在预热过程中发现服务异常立即触发熔断机制停止流量的进一步流入。健康检查通过定期发送心跳包和调用关键接口确保服务的健康状态。 5.2 无损预热的实现步骤 设置预热标记在服务启动后设置一个预热标记表示服务正在预热中。 preheattrue调用关键接口在预热阶段调用服务的关键接口验证接口的可用性。 Component public class PreheatRunner implements ApplicationRunner {Autowiredprivate RestTemplate restTemplate;Value(${service.url})private String serviceUrl;Value(${preheat})private boolean isPreheating;Autowiredprivate Environment environment;Overridepublic void run(ApplicationArguments args) throws Exception {if (isPreheating) {// 调用关键接口进行预热ResponseEntityString response restTemplate.getForEntity(serviceUrl /health, String.class);if (response.getStatusCode().is2xxSuccessful()) {logger.info(Preheat completed, key interfaces are available.);// 清除预热标记ConfigurableEnvironment configurableEnvironment (ConfigurableEnvironment) environment;configurableEnvironment.getPropertySources().remove(preheat);System.setProperty(preheat, false);logger.info(Preheat completed, ready to receive traffic.);} else {logger.error(Health check failed, preheat not completed.);}}} }逐步增加流量在预热阶段逐步增加流量确保服务能够平稳过渡到高负载状态。 Configuration public class RateLimiterConfig {Beanpublic RateLimiter rateLimiter() {return RateLimiter.create(1.0); // 每秒1个请求}Beanpublic FilterRegistrationBeanRateLimitFilter rateLimitFilter(RateLimiter rateLimiter) {FilterRegistrationBeanRateLimitFilter registrationBean new FilterRegistrationBean();registrationBean.setFilter(new RateLimitFilter(rateLimiter));registrationBean.addUrlPatterns(/*);registrationBean.setOrder(1);return registrationBean;} }public class RateLimitFilter implements Filter {private final RateLimiter rateLimiter;public RateLimitFilter(RateLimiter rateLimiter) {this.rateLimiter rateLimiter;}Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {if (rateLimiter.tryAcquire()) {chain.doFilter(request, response);} else {HttpServletResponse httpResponse (HttpServletResponse) response;httpResponse.setStatus(HttpStatus.TOO_MANY_REQUESTS.value());httpResponse.getWriter().write(Too many requests);}} }健康检查通过定期发送心跳包和调用关键接口确保服务的健康状态。 Component public class HeartbeatTask {Value(${service.url})private String serviceUrl;Scheduled(fixedRate 10000) // 每10秒执行一次public void heartbeat() {try {ResponseEntityString response restTemplate.getForEntity(serviceUrl /health, String.class);if (response.getStatusCode().is2xxSuccessful()) {logger.info(Heartbeat successful.);} else {logger.warn(Heartbeat failed.);}} catch (Exception e) {logger.error(Heartbeat error: e.getMessage());}} }RestController public class HealthController {GetMapping(/health)public MapString, String health() {MapString, String healthMap new HashMap();healthMap.put(status, UP);healthMap.put(cpu, getCpuUsage());healthMap.put(memory, getMemoryUsage());healthMap.put(disk, getDiskUsage());return healthMap;}private String getCpuUsage() {// 获取CPU使用情况return 0.1; // 示例值}private String getMemoryUsage() {// 获取内存使用情况return 0.2; // 示例值}private String getDiskUsage() {// 获取磁盘使用情况return 0.3; // 示例值} }清除预热标记当预热完成后清除预热标记表示服务已经准备好。 Component public class PreheatRunner implements ApplicationRunner {Autowiredprivate RestTemplate restTemplate;Value(${service.url})private String serviceUrl;Value(${preheat})private boolean isPreheating;Autowiredprivate Environment environment;Overridepublic void run(ApplicationArguments args) throws Exception {if (isPreheating) {// 调用关键接口进行预热ResponseEntityString response restTemplate.getForEntity(serviceUrl /health, String.class);if (response.getStatusCode().is2xxSuccessful()) {logger.info(Preheat completed, key interfaces are available.);// 清除预热标记ConfigurableEnvironment configurableEnvironment (ConfigurableEnvironment) environment;configurableEnvironment.getPropertySources().remove(preheat);System.setProperty(preheat, false);logger.info(Preheat completed, ready to receive traffic.);} else {logger.error(Health check failed, preheat not completed.);}}} }流量控制负载均衡器和客户端在调度流量时会检查节点的预热标记只将流量分配到预热完成的节点。 upstream backend {server 192.168.1.1:8080;server 192.168.1.2:8080;# 健康检查health_check; }server {listen 80;location / {proxy_pass http://backend;} }6 总结 通过本文的介绍我们详细了解了Java RPC框架的接口预热原理及其无损实现。预热机制不仅可以提高系统的稳定性和性能还能确保负载均衡器更准确地评估各个节点的健康状态。希望本文的内容对你在面试中应对相关问题有所帮助。 乐于分享和输出干货的WXGZGJavaPersons
http://www.zqtcl.cn/news/942437/

相关文章:

  • 网站建设行业细分专业动漫如何制作
  • 做地方网站数据哪里来模板网站建设教程视频
  • 株洲建设网站制作网络怎么推广自己的产品
  • dtu网站开发赣县网站制作
  • 东莞旅游网站建设微网站怎么做
  • 网站怎么没有排名做义工旅行有哪些网站
  • 阳江房地产信息网官方网站创业网站开发要多少钱
  • 工业设计招聘信息网站常用的seo网站优化排名
  • 温岭市建设规划局网站网站规划与建设ppt
  • 龙岩网站建设较好的公司做网站销售的换工作
  • 潞城建设局网站建设网站服务器自营方式的特点
  • 西安网站seo公司东莞市专注网站建设怎么样
  • dede游戏网站模板如何做盆栽蔬菜网站
  • 江都建设网站网站开发技术介绍
  • 网站介绍视频怎么做网站建设优化服务
  • 可以左右滑动的网站有口碑的盐城网站建设
  • 360报危险网站注册界面设计
  • 不用淘宝客api如何做网站北京移动官网网站建设
  • 手表哪个网站做的好河北网站备案流程
  • 凡科做的网站推效果网站做seo第一步
  • 建设在线观看视频网站免费企业网站建设免费
  • 网站开发需要后台吗哪家建站公司好
  • 个人建设网站论文网站视频怎么做的
  • 不同类型的购物网站汉川网站建设
  • 网站开发需求文档范文广州公司网站托管
  • 网站制作公司官网首页撸撸撸做最好的导航网站
  • 网站建设毕业设计综述centos 安装wordpress lnmp
  • 济宁专业做网站网站建设中 html
  • 中国排名高的购物网站最新发布的手机2022
  • 备案的网站名与公司名称出国用哪个地图app好