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

网站设计应该遵循哪些原则安装手机app

网站设计应该遵循哪些原则,安装手机app,个人网站的制作代码,青春网站建设工作室前言小明是个单纯的 .NET开发#xff0c;一天大哥叫住他#xff0c;安排了一项任务#xff1a;“小明#xff0c;分析一下我们 超牛逼网站上个月的所有 AWS ELB流量日志#xff0c;这些日志保存在 AWS S3上#xff0c;你分析下#xff0c;看哪个 API的响应时间中位数最长… 前言小明是个单纯的 .NET开发一天大哥叫住他安排了一项任务“小明分析一下我们 超牛逼网站上个月的所有 AWS ELB流量日志这些日志保存在 AWS S3上你分析下看哪个 API的响应时间中位数最长。”“对了别用 Excel哥给你写好了一段 Python脚本可以自动解析统计一个 AWS ELB文件的日志你可以利用一下。”“好的✌大哥真厉害!”。小明看了一下然后傻眼了在管理控制台中九月份 AWS ELB日志文件翻了好几页都没翻完大概算算大概有 1000个文件不止。想想自己又不懂 Python又不是搞数据分析专业出身的这个“看似简单”的工作完不成这周怕是陪不了女朋友搞不好还要 996.ICU小明几乎要流下了没有技术的泪水……不怕会.NET就行要完成这项工作光老老实实将文件从管理控制台下载到本地估计都够喝一壶。若小明稍机灵点他可能会找到 AWS S3的文件管理器然后……发现只有付费版才有批量下载功能。其实要完成这项工作只需做好两项基本任务即可从 AWS S3下载9月份的所有 ELB日志聚合并分析这1000多个日志文件然后按响应时间中位数倒排序AWS资源能在管理控制台上看到的 AWS资源 AWS都提供了各语言的 SDK可供操作可在 SDK上操作的东西如批量下载反倒不一定能在界面上看到。SDK支持多种语言其中显然也包括 .NET。对于 AWS S3的访问 Amazon提供的 NuGet包叫AWSSDK.S3在 VisualStudio中下载并安装即可运行本文的示例。要使用 AWSSDK.S3首先需要实例化一个 AmazonS3Client并传入 aws access key、 aws secret key、 AWS区域等参数var credentials new BasicAWSCredentials( Util.GetPassword(aws_live_access_key), Util.GetPassword(aws_live_secret_key)); var s3 new AmazonS3Client(credentials, RegionEndpoint.USEast1);注意本文的所有代码全部共享这一个 s3的实例。因为根据文档 AmazonS3Client实例是设计为线程安全的。在下载 AWS S3的文件对象之前首先需要知道有哪些对象可供下载可通过 ListObjectsV2Async方法列出某个 bucket的文件列表。注意该方法是分页的经我的测试无论 MaxKeys参数设置多大该接口最多一次性返回 1000条数据但这显然不够因此需要循环分页去拿。分页时该响应对象中包含了 NextContinuationToken和 IsTruncated属性如果 IsTruncatedtrue则 NextContinuationToken必定有值此时下次调用 ListObjectsV2Async时的请求参数传入 NextContinuationToken即可实现分页获取 S3文件列表的功能。这个过程说起来有点绕但感谢 C#提供了 yield关键字来实现 协程-coroutine代码写起来非常简单IEnumerableListS3Object Load201909SuperCoolData(AmazonS3Client s3) { ListObjectsV2Response response null; do { response s3.ListObjectsV2Async(new ListObjectsV2Request { BucketName supercool-website, Prefix AWSLogs/1383838438/elasticloadbalancing/us-east-1/2019/09, ContinuationToken response?.NextContinuationToken, MaxKeys 100, }).Result; yield return response.S3Objects; } while (response.IsTruncated); }注意Prefix为前缀 AWS ELB日志都会按时间会有一个前缀模式从文件列表中找到这一模式后填入该参数。接下来就简单了通过 GetObjectAsync方法即可下载某个对象要直接分析最好先转换为字符串拿到文件流 stream后最简单的方式是使用 StreamReader将其转换为字符串IEnumerablestring ReadS3Object(AmazonS3Client s3, S3Object x) { using GetObjectResponse obj s3.GetObjectAsync(x.BucketName, x.Key).Result; using var reader new StreamReader(obj.ResponseStream); while (!reader.EndOfStream) { yield return reader.ReadLine(); } }注意GetObjectAsync方法返回的 GetObjectResponse类实现了 IDisposable接口因为它的 ResponseStream实际上是非托管资源需要单独释放。因此需要使用 using关键字来实现资源的正确释放。可以直接调用 StreamReader.ReadToEnd()方法直接获取全部字符串然后再通过 Split将字符串按行分隔但这样会浪费大量内存影响性能。这时一般会将这个 stream缓存到本地磁盘以供慢慢分析但也可以一鼓作气直接将该 stream转换为字符串直接分析。本文将采取后者做法。分析1000多个文件每个 ELB日志文件的格式如下2019-08-31T23:08:36.637570Z SUPER-COOLELB 10.0.2.127:59737 10.0.3.142:86 0.000038 0.621249 0.000041 200 200 6359 291 POST http://super-coolelb-10086.us-east-1.elb.amazonaws.com:80/api/Super/Cool HTTP/1.1 - - - 2019-08-31T23:28:36.264848Z SUPER-COOLELB 10.0.3.236:54141 10.0.3.249:86 0.00004 0.622208 0.000045 200 200 6359 291 POST http://super-coolelb-10086.us-east-1.elb.amazonaws.com:80/api/Super/Cool HTTP/1.1 - - -可见该日志有一定格式 Amazon提供了该日志的详细文档中文说明https://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-log-entry-format根据文档这种日志可以通过按简单的空格分隔来解析但后面的 RequestInfo和 UserAgent字段稍微麻烦点这种可以使用 正则表达式来实现比较精致的效果public static LogEntry Parse(string line) { MatchCollection s Regex.Matches(line, [\].?[\]|[^ ]); string[] requestInfo s[11].Value.Replace(\, ).Split( ); return new { Timestamp DateTime.Parse(s[0].Value), ElbName s[1].Value, ClientEndpoint s[2].Value, BackendEndpoint s[3].Value, RequestTime decimal.Parse(s[4].Value), BackendTime decimal.Parse(s[5].Value), ResponseTime decimal.Parse(s[6].Value), ElbStatusCode int.Parse(s[7].Value), BackendStatusCode int.Parse(s[8].Value), ReceivedBytes long.Parse(s[9].Value), SentBytes long.Parse(s[10].Value), Method requestInfo[0], Url requestInfo[1], Protocol requestInfo[2], UserAgent s[12].Value.Replace(\, ), SslCypher s[13].Value, SslProtocol s[14].Value, }; }LINQ数据下载好了解析也成功了这时即可通过强大的 LINQ来进行分析。这里将用到以下的操作符SelectMany 数据“打平”和 js数组的 .flatMap方法类似Select 数据转换和 js数组的 .map方法类似GroupBy 数据分组首先通过 AWSSDK的 ListObjectsV2Async方法获取的是文件列表可以通过 .SelectMany方法将多个下载批次“打平”Load201909SuperCoolData(s3) .SelectMany(x x)然后通过 Select将单个文件 Key下载并读为字符串Load201909SuperCoolData(s3) .SelectMany(x x) .SelectMany(x ReadS3Object(s3, x))然后再通过 Select将文件每一行日志转换为一条 .NET对象Load201909SuperCoolData(s3) .SelectMany(x x) .SelectMany(x ReadS3Object(s3, x)) .Select(LogEntry.Parse)有了 .NET对象即可利用 LINQ进行愉快地分析了如小明需要求只需加一个 GroupBy和 Select即可求得根据 Url分组的响应时间中位数然后再通过 OrderByDescending即按该数字排序最后通过 .Dump显示出来Load201909SuperCoolData(s3) .SelectMany(x x) .SelectMany(x ReadS3Object(s3, x)) .Select(LogEntry.Parse) .GroupBy(x x.Url) .Select(x new { Url x.Key, Median x.OrderBy(x x.BackendTime).ElementAt(x.Count() / 2) }) .OrderByDescending(x x.Median) .Dump();运行效果如下多线程下载解析和分析都在内存中进行因此本代码的瓶颈在于下载速度。上文中的代码是串行、单线程下载带宽利用率低下载速度慢。可以改成并行、多线程下载以提高带宽利用率。传统的多线程需要非常大的功力需要很好的技巧才能完成。但 .NET4.0发布了 ParallelLINQ只需极少的代码改动即可享受到多线程的便利。在这里只需将在第二个 SelectMany后加上一个 AsParallel()即可瞬间获取多线程下载优势Load201909SuperCoolData(s3) .SelectMany(x x) .AsParallel() // 重点 .SelectMany(x ReadS3Object(s3, x)) .Select(LogEntry.Parse) .GroupBy(x x.Url) .Select(x new { Url x.Key, Median x.OrderBy(x x.BackendTime).ElementAt(x.Count() / 2) }) .OrderByDescending(x x.Median) .Dump();注意写 AsParallel()的位置有讲究这取决于你对性能瓶颈的把控。总的来说太靠后了不行因为 AsParallel之前的语句都是串行的靠前了也不行因为靠前的代码往往数据量还没扩大并行没意义扩展到了这一步如果小明足够机灵其实还能再扩展扩展将平均值总响应时间一并求出来改动代码也不大只需将下方那个 Select改成如下即可 .Select(x new { Url x.Key, Median x.OrderBy(x x.BackendTime).ElementAt(x.Count() / 2), Avg x.Average(x x.BackendTime), Sum x.Sum(x x.BackendTime), })运行效果如下总结看来并不需要 python有了 .NET和 LINQ两大法宝看来小明周末又可以陪女朋友了?
http://www.ihoyoo.com/news/13530.html

相关文章:

  • 找网站建设公司哪家最好wordpress ent 主题
  • 简单网站建设推荐长沙专业网站优化定制
  • 哪个网站专门做商铺啊东莞58同城广告推广公司
  • 北京网站设计联系方式重庆巫溪网站建设
  • 在iis搭建网站wordpress 发布插件
  • 钟表网站模板大数据
  • 有没有做网站源代码 修改的安康市网站开发
  • 电商网站设计价格兄弟们给个能用的网站
  • 黑龙江建设网官方网站特种作业火车采集器 wordpress
  • 电子商务网站的数据库怎么做如何做一个宣传片
  • 深圳 建网站深圳网站建设是什么
  • 设计类的网站目前基金会网站做的比较好的
  • 做一个新公司网站要多少钱办一个购物网站要多少钱
  • 网站首页效果图网络策划工作内容
  • 建站公司网站源码社区建网站 几个链接
  • 嘉兴网站专业上海建站
  • 去国外做赌钱网站网站建设优化托管
  • 制作和淘宝商城一样网站上海广告公司工资
  • 做电影网站如何寻找资源企业展厅设计公司的区别在哪
  • 做旅游海报哪个网站好免费的深圳网站开发建设培训机构
  • dw网站建设的基本流程免费注册公司邮箱
  • 百度关键词网站排名优化软件做的网站很卡是什么原因
  • 怎么建立企业网站平台成都到西安多少公里路
  • p2p网站建设的步骤过程动态交互图表制作
  • 茶叶公司网站源码网站建设及报价方案
  • 物流网站制作商城网站功能文档
  • 响应式网站 谷歌 移动网站做网店装修的网站有哪些内容
  • 企业网站建设中在方案设计上郑州 网站建设的公司
  • 加强心理咨询网站的建设国外购物网站建设
  • 儿童网站模板免费下载网上做任务佣金高的网站