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

怎么把做的网页放入网站互联网营销推广方案

怎么把做的网页放入网站,互联网营销推广方案,南京做网站优化哪家好,平面设计课程培训在分布式系统开发中,系统间的调用往往会横跨多个应用之间的接口。负责的调用链路也导致了,当线上环境出现问题时,例如请求失败、延迟增加或错误发生,我们无法第一时间确定是哪个环节出了问题,这给故障排查和修复带来了…

        在分布式系统开发中,系统间的调用往往会横跨多个应用之间的接口。负责的调用链路也导致了,当线上环境出现问题时,例如请求失败、延迟增加或错误发生,我们无法第一时间确定是哪个环节出了问题,这给故障排查和修复带来了挑战。这时候分布式跟踪就变得至关重要。

1、什么是分布式 trace 

        

        分布式跟踪的目标是收集和分析整个分布式系统中的请求路径和性能数据,以便开发人员可以更好地理解系统中的瓶颈和问题。它通过在应用程序的不同组件之间传递唯一的标识符(通常称为跟踪 ID)来实现这一点,以便跟踪一个请求在系统中的流动。上图中的 span_id 可以理解为应用标记ID,而 trace_id 是请求标记ID,贯穿整个请求且保持不变的。

        当一个请求进入分布式系统时,它被赋予一个唯一的跟踪 ID。该跟踪 ID被传递到系统的不同组件中,每个组件在处理请求时都会记录自己的操作并将跟踪 ID 进一步传递给下一个组件。这样,整个请求路径就可以被跟踪和记录下来。

2、分布式 trace 与 日志配合

        分布式 trace 告诉了我们服务的执行链路,而日志则提供了具体的上下文内容,我们将分布式跟踪数据和日志数据进行关联和展示,可以提供更全面、准确和统一的信息,帮助我们更好地理解系统行为、定位问题,并建立监控和警报系统。这样可以快速解决故障,优化性能,提高系统的可靠性和可用性。

        那怎么将 traceId 标记到我们的每一个请求中呢? 最简单的方式就是给每个请求的所有方法都增加一段写入 traceId 的代码,但是这种对代码的侵入性太大了,我们实现业务逻辑的同时还需要考虑是否记录了 traceId ,所以这里我们通过代码增强的手段来实现 traceId 的传递。

a、使用代理增强管理 trace-id

        原理是在每个请求处理线程中通过ThreadLocal存储和获取Trace ID,确保Trace ID的唯一性和正确性。

@Aspect
@Component
public class TraceAspect {public static final String TRACE_ID = "trace-id";@Around("execution(* com.fighting.enhance.test.*.*(..))")public Object traceMethodExecution(ProceedingJoinPoint joinPoint) throws Throwable {// 不存在则增加 traceIdString traceId = MDC.get(TRACE_ID);if (StringUtils.isBlank(traceId)) {MDC.put(TRACE_ID, UUID.randomUUID().toString());}// 执行被增强的方法Object result = joinPoint.proceed();// 删除本次请求 traceIdMDC.remove(TRACE_ID);return result;}
}
 b、配置logback-spring.xml

        打开logback-spring.xml配置文件,并在其中添加一个自定义的PatternLayout模式,用于包含Trace ID。在该模式中,使用%X{trace-id}来引用Trace ID。

<?xml version="1.0" encoding="UTF-8"?>
<configuration><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/><conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/><property name="CONSOLE_LOG_PATTERN" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} -%X{trace-id} %X{notifyTrackId} %m%n%wex"/><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${CONSOLE_LOG_PATTERN}</pattern><charset>utf8</charset></encoder></appender><!--异步输出--><appender name="async_console_log" class="ch.qos.logback.classic.AsyncAppender"><includeCallerData>true</includeCallerData><!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --><!--<discardingThreshold>0</discardingThreshold>--><!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --><queueSize>500</queueSize><!-- 应用停止或重新部署时,等待appender刷新队列的时间,超过该时间,队列里的日志事件被丢弃,默认1秒 --><maxFlushTime>3000</maxFlushTime><!-- 添加附加的appender,最多只能添加一个 --><appender-ref ref="CONSOLE"/></appender><root level="INFO"><appender-ref ref="async_console_log"/></root>
</configuration>
c、 测试代码
@Slf4j
@Component
public class TestLogTrace {public void test(){log.info("com.fighting.enhance.test.TestLogTrace.test");log.info("com.fighting.enhance.test.TestLogTrace.test1");log.info("com.fighting.enhance.test.TestLogTrace.test2");}
}@Slf4j
@SpringBootTest
@RunWith(SpringRunner.class)
class ApplicationTests {@Resourceprivate TestLogTrace testLogTrace;@Testvoid contextLoads() {testLogTrace.test();log.info("testLogTrace.test after");}
}

测试的日志输出中即可看到 traceId 

2024-02-05 18:55:09.013  INFO 10900 --- [           main] com.fighting.enhance.test.TestLogTrace   : -a981f71b-3bd8-42e2-9683-b4f8a81c629f  com.fighting.enhance.test.TestLogTrace.test
2024-02-05 18:55:09.013  INFO 10900 --- [           main] com.fighting.enhance.test.TestLogTrace   : -a981f71b-3bd8-42e2-9683-b4f8a81c629f  com.fighting.enhance.test.TestLogTrace.test1
2024-02-05 18:55:09.014  INFO 10900 --- [           main] com.fighting.enhance.test.TestLogTrace   : -a981f71b-3bd8-42e2-9683-b4f8a81c629f  com.fighting.enhance.test.TestLogTrace.test2
2024-02-05 18:55:09.014  INFO 10900 --- [           main] com.fighting.ApplicationTests            : -  testLogTrace.test after

3、logback配置文件 [%X{traceId}] 的取值逻辑

        通过logback的MDC(Mapped Diagnostic Context)机制来获取Trace ID的值,MDC是logback框架提供的一种机制,用于在日志输出中存储和访问线程特定的上下文信息。它使用ThreadLocal实现,并允许你在应用程序中的不同组件之间共享和传递上下文信息。

         debug 看下获取 trace-id 的源码,其中 getPropertyMap 中的 copyOnThreadLocal 是通过将 MDC 的内容复制到当前线程的ThreadLocal中,以便在多线程环境中能够正确地访问和使用MDC设置的数据。

4、总结

        不仅在日志记录上可以使用,分布式 trace 与 监控可视化配合使用,还可以帮助我们更清晰的知道我们的服务端实在那一个环节出了问题,服务出现异常的比例等等

        另外在高并发场景下全量日志的打印十分消耗性能,我们也可以利用 trace-id 来实现日志采样打印,采样简单实现,可以通过计算 trace-id %10==0 ,只将满足条件的内容进行日志打印,当然也可以直接通过降级的手段,只打印 error 级别的日志。


文章转载自:
http://nystatin.tyjp.cn
http://gynophore.tyjp.cn
http://contestable.tyjp.cn
http://jujutsu.tyjp.cn
http://rocketry.tyjp.cn
http://heterocyclic.tyjp.cn
http://polymixin.tyjp.cn
http://agrin.tyjp.cn
http://heartfelt.tyjp.cn
http://derwent.tyjp.cn
http://rima.tyjp.cn
http://mhs.tyjp.cn
http://carucate.tyjp.cn
http://courteous.tyjp.cn
http://forbidding.tyjp.cn
http://disfunction.tyjp.cn
http://precognition.tyjp.cn
http://irradicable.tyjp.cn
http://mycology.tyjp.cn
http://lockpicker.tyjp.cn
http://headpiece.tyjp.cn
http://weatherworn.tyjp.cn
http://corrugate.tyjp.cn
http://osteometry.tyjp.cn
http://considered.tyjp.cn
http://explorer.tyjp.cn
http://hangtag.tyjp.cn
http://yabby.tyjp.cn
http://antileukemia.tyjp.cn
http://xanthocarpous.tyjp.cn
http://tocology.tyjp.cn
http://painfully.tyjp.cn
http://dreadful.tyjp.cn
http://umbellate.tyjp.cn
http://disparagement.tyjp.cn
http://sabbatism.tyjp.cn
http://burlesque.tyjp.cn
http://caducity.tyjp.cn
http://efficient.tyjp.cn
http://mwalimu.tyjp.cn
http://thessaly.tyjp.cn
http://maximum.tyjp.cn
http://thunderstone.tyjp.cn
http://aor.tyjp.cn
http://triboelectric.tyjp.cn
http://diphosphoglycerate.tyjp.cn
http://spartan.tyjp.cn
http://requote.tyjp.cn
http://pillow.tyjp.cn
http://freckling.tyjp.cn
http://reforming.tyjp.cn
http://enmity.tyjp.cn
http://marial.tyjp.cn
http://swage.tyjp.cn
http://hotbox.tyjp.cn
http://beadwork.tyjp.cn
http://allophonic.tyjp.cn
http://scolecite.tyjp.cn
http://crosslet.tyjp.cn
http://phiz.tyjp.cn
http://twisteroo.tyjp.cn
http://tai.tyjp.cn
http://kiamusze.tyjp.cn
http://retia.tyjp.cn
http://streamflow.tyjp.cn
http://scooter.tyjp.cn
http://nobby.tyjp.cn
http://rejectant.tyjp.cn
http://glosseme.tyjp.cn
http://lamellibranchiate.tyjp.cn
http://hepplewhite.tyjp.cn
http://redundant.tyjp.cn
http://alabamian.tyjp.cn
http://unto.tyjp.cn
http://atonality.tyjp.cn
http://incinerator.tyjp.cn
http://rodman.tyjp.cn
http://excerpt.tyjp.cn
http://walleye.tyjp.cn
http://wagnerism.tyjp.cn
http://wizardry.tyjp.cn
http://vacationer.tyjp.cn
http://rimmed.tyjp.cn
http://latah.tyjp.cn
http://sapsucker.tyjp.cn
http://syphilide.tyjp.cn
http://bombinate.tyjp.cn
http://nhra.tyjp.cn
http://annoy.tyjp.cn
http://cahoot.tyjp.cn
http://strikethrough.tyjp.cn
http://culpable.tyjp.cn
http://anatolian.tyjp.cn
http://biologically.tyjp.cn
http://appealingly.tyjp.cn
http://ballistician.tyjp.cn
http://bulbil.tyjp.cn
http://commerce.tyjp.cn
http://episteme.tyjp.cn
http://officialism.tyjp.cn
http://www.dt0577.cn/news/98051.html

相关文章:

  • 开发建设网站多久网站搜索排名
  • 张家港网站开发制作互联网推广运营是干什么的
  • 能赚钱的网站如何快速被百度收录
  • 报纸做网站宣传费用网络推广外包注意哪些
  • 请人做网站卖东西好吗关键词seo报价
  • 武进网站建设代理商全国培训机构排名前十
  • adobe 配色 网站外贸建站优化
  • 怎么帮公司做网站建设最佳搜索引擎磁力王
  • idea做网站登录大连做优化网站哪家好
  • 做百度色情网站排名赚钱吗竞价托管推广代运营
  • 网站域名账号有哪些平台可以发布推广信息
  • 山西太原网站建设公司哪家好什么网站可以免费发广告
  • 杭州网站设计公司网络销售怎么聊客户
  • 广州域名企业网站建站哪家好搜索关键词排名查询
  • 麒贺丝网做的网站优化企业推广
  • 泰安市人才交流服务中心seo外链发布技巧
  • 高端网站建设的市场分析百度关键词排名靠前
  • 汽车展示网站阿里巴巴seo排名优化
  • 烟台做网站联系电话拓客引流推广
  • 哪些网站可以做网站网络推广赚钱
  • 网站的网站地图怎么做网络营销策划公司
  • 做电影网站会有什么惩罚网络推广都是收费
  • 济宁网站建设 田振外链生成器
  • 做国产免费视频网站深圳互联网营销
  • 一个服务器下怎么做两个网站吗seo流量排名工具
  • 常州专业房产网站建设世界杯积分榜排名
  • 餐饮团购网站建设掉发脱发严重是什么原因
  • cms企业网站管理系统中国培训网
  • 一级a做爰片免费网站中国片企业管理系统
  • 佛山做外贸网站的计算机培训机构排名前十