51CTO--从“应用可用”到“服务可达” 博睿数据的DNA创新法则

2022-08-05

如今,企业不能只关注自己的数据中心是否可靠、可用,而是需要将焦点转移到用户本身。企业可以通过博睿数据的数据链DNA来实现应用可用到服务可达的过度,建立以用户为中心的服务可达能力的监控和评估,提升自动化运维能力,从而提升用户体验,加快企业数字化转型进程。


过去,用户在使用应用时会经常出现问题,很可能有多种原因造成。然而,应用服务商却认为,自己的应用是没问题的,因为一切IT指标都是正常的,那原因就只能出自用户方。但是,在用户至上的今天,BATJ给予了用户丰富的互联网体验,这些体验的高要求也逐渐成为了企业参考的标准。企业不能只关注自己的数据中心是否可靠、可用,而是需要将焦点转移到用户本身。


博睿数据COO吴静涛表示,企业可以通过博睿数据的数据链DNA来实现应用可用到服务可达的过度,建立以用户为中心的服务可达能力的监控和评估,提升自动化运维能力,从而提升用户体验,加快企业数字化转型进程。


注重用户体验 IT视角焦点转移

70年代,IT是以计算为中心,更多的企业选择大型主机来支撑数据中心的计算工作。到了90年代,大量应用涌现,于是便出现了以应用为中心的数据中心,IT指标体系也是以应用为中心所构建,包括高可用、高可靠性、可扩展性等性能要求。


但是到了2020年,随着用户对于应用的体验要求越来越高,以应用为中心的IT指标体系逐渐不受用。于是,博睿数据提出了以用户为中心的新的IT指标体系,从应用可用向服务可达进行转变。


吴静涛解释说,应用可用强调的是数据中心的可靠性,但并不关心最终用户的体验。而服务可达则是着眼于用户的角度,让用户使用体验更好。这一转变是思维的转变,其中最重要的视角的变化。过去企业总是以自己的视角为主,以应用为中心,以数据中心为基础,应用高可用作为为指标;而现在,企业需要以用户端作为视角,以服务可达为基础,以用户体验为指标,以互联网用户体验为第一原则。


数据链DNA的创新手段

企业应用的代码到客户使用之间存在很多环节, 比如客户端多样化、最后一公里、边缘计算CDN、多云性能、PaaS、代码/SQL调用等, 任何一个环节出现问题带来的都是体验下降,客户投诉/携号转网/携款转户等企业用户最不愿听到看到的负面影响就会发生。


因此,以用户为中心的IT指标体系,需要考虑从代码到用户的全链路,包括应用代码、云和IDC、传输的通道和链路、边缘端及CDN以及智能终端各个层面。


吴静涛将这一革命性想法的手段称之为服务可达的数据链DNA,包括DEM、NPM和APM,从代码到用户的全过程进行监控,帮助企业客户应对Z世代对应用可用性,应用体验的高要求,在稳定可靠和灵捷快速之间取得相对平衡,从而加快数字化转型。

DEM (Digital Experience Management): 用户数字体验管理,包含客户端APP体验监控, 浏览器体验监控, 小程序体验监控, 浏览器拨测和手机真机拨测等一系列技术。


NPM (Network Performance Management): 网络性能管理,通过探针技术、BigIP大数据引擎、Nginx Telemetry等技术,实现网络传输的路径发现、异常发现,和故障发现。


APM (Application Performance Management): 应用性能管理,通过字节码注入和微服务探针,在无需应用代码变更的情况下实现对代码运行效率,SQL调用效率,PaaS API调用逻辑追踪,以及微服务的性能监控。


通过“D”收集外部用户体验,“N”来管理网络传输的数据路径,“A”管理应用的性能,从而提高代码和数据库调动效率,一旦出现用户体验下降的问题,就可以清晰地定位到问题的原因并快速解决,从而提升每个用户的体验。


博睿数据创始人兼CTO孟曦东表示,企业若想达到服务可达,需要具备DNA三方面的能力。目前,众多企业客户都已经具备某一个或某两方面能力,企业需要将能力补齐,才能达到真正的服务可达。


7种武器完善DNA技能

为了帮助企业更好地应用DNA能力,博睿数据提出了七种武器,从云、管、边、端、业五个层面,帮助企业完善DNA技能,实现从代码到应用的全链路监控。


1. 客户端: 通过拨测/SDK/反嵌JS等方式,对浏览器、APP、H5等进行监控,确保服务可达并提升用户体验;


2. Edge/CDN节点: 借助主动拨测进行性能监控,得到使用过程中的实际性能表现,将延迟和丢包作为选型依据和性能排查依据;


3. 云服务: 通过每月对云服务商监控提供定期性能报告, 成为企业客户对多云服务的议价依据, 从而提升企业客户的实际服务能力和可用性;


4. 门户: 通过对页面/首屏加载情况进行分析,信创环境和传统环境的灰度性能分析,提供专业建议,从而提高体验,避免劫持,提高可用性;


5. 网络: 时流数据抓取分析技术,实时流数据路径判断,快速发现和排除网络上的节点故障;


6. PaaS平台/API: 通过ADT应用深度追踪,将调用逻辑的自动拓扑可视化,快速发现API服务异常,重载过库攻击等现网环境风险;


7. 代码/DB: 借助APM应用性能管理产品,通过字节码注入,企业无需开发变更,,即可现网实现对代码执行,SQL调用效率的监控,是DevOps的必备技术, 也是提升信创平台应用性能的利器。


吴静涛指出,在实现或部分实现服务可达的数据链DNA 后,再将代码到用户访问全过程的采集遥测(Telemetry)数据整合到大数据平台 DataView,实现对VIP用户访问的全站溯源;通过机器学习建立智能基线,实现智能警报;再继续通过AI实现根因分析,提出解决建议,甚至通过API调用验证过的预配置,实现一键变更,一键割接。最终帮助企业用户在保证稳定可靠的社会责任的同时,实现现有平台和云原生平台、信创平台、微服务平台的可靠性和性能提升。


据了解,目前博睿数据已经完成了对国产芯片、操作系统的适配,正在进行数据库和中间件层面的适配。吴静涛表示,希望未来在信创体系中,博睿数据的数据链DNA能够能发挥更大的作用。

文章标签

应用性能监控 网络性能监控

相关文章

FreeMarker template error (DEBUG mode; use RETHROW in production!): The string doesn't match the expected date/time/date-time format. The string to parse was: "2024年3月5日". The expected format was: "MMM d, y". The nested reason given follows: Unparseable date: "2024年3月5日" ---- FTL stack trace ("~" means nesting-related): - Failed at: #if "2024年3月5日"?date lt item.createTi... [in template "themes/halo_quickstarter/post_newsDetail.ftl" at line 106, column 25] ---- Java stack trace (for programmers): ---- freemarker.core._TemplateModelException: [... Exception message was already printed; see it above ...] at freemarker.core.BuiltInsForMultipleTypes$dateBI$DateParser.parse(BuiltInsForMultipleTypes.java:220) at freemarker.core.BuiltInsForMultipleTypes$dateBI$DateParser.getAsDateModel(BuiltInsForMultipleTypes.java:190) at freemarker.core.BuiltInsForMultipleTypes$dateBI$DateParser.getAsDate(BuiltInsForMultipleTypes.java:197) at freemarker.core.EvalUtil.modelToDate(EvalUtil.java:86) at freemarker.core.EvalUtil.compare(EvalUtil.java:270) at freemarker.core.EvalUtil.compare(EvalUtil.java:115) at freemarker.core.ComparisonExpression.evalToBoolean(ComparisonExpression.java:78) at freemarker.core.IfBlock.accept(IfBlock.java:49) at freemarker.core.Environment.visit(Environment.java:370) at freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:321) at freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:271) at freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:244) at freemarker.core.Environment.visitIteratorBlock(Environment.java:644) at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:108) at freemarker.core.IteratorBlock.accept(IteratorBlock.java:94) at freemarker.core.Environment.visit(Environment.java:334) at freemarker.core.Environment.visit(Environment.java:340) at freemarker.core.Environment.visit(Environment.java:340) at freemarker.core.Environment.process(Environment.java:313) at freemarker.template.Template.process(Template.java:383) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:391) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:304) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:255) at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:179) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:316) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1401) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1145) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1084) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:497) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:584) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1631) at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:230) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at run.halo.app.cas.UserInfoFilter.doFilter(UserInfoFilter.java:37) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.jasig.cas.client.util.AssertionThreadLocalFilter.doFilter(AssertionThreadLocalFilter.java:54) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.jasig.cas.client.util.HttpServletRequestWrapperFilter.doFilter(HttpServletRequestWrapperFilter.java:75) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at run.halo.app.cas.MyAbstractTicketValidationFilter.doFilter(MyAbstractTicketValidationFilter.java:215) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at run.halo.app.cas.MyAuthenticationNoLoginFilter.doFilter(MyAuthenticationNoLoginFilter.java:57) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at run.halo.app.security.filter.ContentFilter.doAuthenticate(ContentFilter.java:69) at run.halo.app.security.filter.AbstractAuthenticationFilter.doFilterInternal(AbstractAuthenticationFilter.java:229) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at run.halo.app.filter.CorsFilter.doFilter(CorsFilter.java:53) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at run.halo.app.filter.LogFilter.doFilterInternal(LogFilter.java:40) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.Server.handle(Server.java:516) at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: freemarker.core.UnparsableValueException: Unparseable date: "2024年3月5日" at freemarker.core.JavaTemplateDateFormat.parse(JavaTemplateDateFormat.java:51) at freemarker.core.JavaTemplateDateFormat.parse(JavaTemplateDateFormat.java:33) at freemarker.core.BuiltInsForMultipleTypes$dateBI$DateParser.parse(BuiltInsForMultipleTypes.java:213) ... 118 more Caused by: java.text.ParseException: Unparseable date: "2024年3月5日" at java.base/java.text.DateFormat.parse(DateFormat.java:395) at freemarker.core.JavaTemplateDateFormat.parse(JavaTemplateDateFormat.java:49) ... 120 more