2019年能源消费总量:4860.0Mtce = 1.42434936e+20J = 48亿吨标准煤

国土面积:960万平方公里 = 9.6e+12 m2

我国属太阳能资源丰富的国家之一,全国总面积2/3以上地区年日照时数大于2000小时,年辐射量在5000MJ/m2以上。据统计资料分析,中国陆地面积每年接收的太阳辐射总量为3.3×103~8.4×103MJ/m2,相当于24,000亿吨标准煤的储量。

太阳能储量/能源消费总量:24000/48 = 500倍。

如果使用20%转化率的太阳能电池,则为满足2018年一次能源消耗量,则需要9.6e+12 48 / (24,000 20%) = 9.6 万平方公里(1.44亿亩),1%的国土面积。

考虑到中国有大片沙漠戈壁(总面积达130.8万平方千米,约占全国土地总面积的13.6%),所以我建议:

给沙漠和戈壁披上太阳能电池!发电,减少沙尘危害,实现碳中和!

Q&A、答疑:

  1. 这事能赚钱么?
    按照目前市面上的太阳能电池价格和年发电量比例,不能赚钱。但是能极大地降低中国碳排放量,极大减少石油依赖,极大保护中国的环境。而且能带动太阳能电池板研发制造、电力输送、终端产品(电动汽车、电动工业机械等)非常多的产业发展。如果我们走在前头,还能把这些先进的产业链出口全球,赚取知识产权和研发设计等高端附加值。
  2. 这事儿技术上可行吗?

    • 目前中国能源消费总量年均增速在3.4%左右,按照国家「十四五」计划中的「到2030年达到碳排放峰值」,预计我们最多耗能应该在4860.0Mtce * (1 + 3.4%) ^ 11 = 7095 Mtce, 71亿吨标准煤,或者说 207937422000000000000 焦耳
    • 目前市面上太阳能天池的功率面积比大约在200 瓦特/平米, 计算成每年产出的电能和面积比应该是2522880000 焦耳,那么很清楚就知道咱们需要207937422000000000000/2522880000 = 82420654966 平方米 = 82420 平方公里 = 1.23569 亿亩土地。小于上面假设的9.6万平方公里,更小于130.8万平方千米的沙漠戈壁。说明有的是地方装。
    • 目前中国光伏产业是少数处于世界领先位置的产业,而且还有点产能过剩,我们自己用没问题!
    • 电池技术突飞猛进,储能电池价格节节下降,在2018年,最低0.8 元/Wh即可买到!
  3. 大概要花多少钱?

    • 太阳能电板: 这么大规模的采购,单价可以降低到0.5元/W(原价在1元/W左右)。按照最高71亿吨标准煤的年发电量,需要2.07937e+20J/3.1536e+07s = 6.59365e+12 W的装机量,也就是需要3.296825e+12元,即3.296825万亿人民币。还不到2008年中国4万亿振兴计划嘛,咱们现在可比十多年前富强多了!
    • 储能电池:目前最低0.8元/Wh单价,咱们集中采购再降低一点,0.4元/Wh!再按照一天4小时发电量做储能,需要6.59365e+12 W * 4 * 0.4 = 1.05498e+13,即10.5498万亿人民币。看起来这个项目跟电动汽车一样,电池是大头!
    • 土地:沙漠戈壁啥的,基本上可以免费,就算1000元/亩象征性收点钱。1.64841e+13 W的装机量,目前市面上太阳能电池功率占面积比大约200 W/平米, 再留一个10%的面积用来固定,那么需要9.06628e+10 平米 = 1.35926e+8亩,粗略需要1.26亿亩地。看来目前转化率不错,不需要1.38亿亩土地了。1.26亿亩土地,需要1260亿买地。
    • 运送安装:厂家包邮,沙漠全是沙子,他们可以就近建厂。沙漠治理+安装费用算1万元/亩,需要1.26万亿
    • 配送运输:国家电网赚钱的事情,给他们2000亿
    • 其他费用: 1000亿
    • 总费用: 15.5326万亿,十五万亿的能源投资计划出炉了!
  4. 那么多的太阳能电池和储能电池,哪里来?
    太阳能电池需要单晶硅,沙漠里面都是沙,就地取材即可。然后招标10-100个太阳能电池厂干活。另外中国是稀土大国,储能电池所需原料都有,请现在做动力电池的老曹出马,也干个10-100个电池厂搞生产。中国集中力量干大事的能力,毋庸置疑!
  5. 这么大的工程规模,怎么铺设电池,怎么输送?
    国家电网的事情,你能发电,他们就能输电,不操心。
  6. 谁掏钱啊?
    15.5万亿,你让国家突然出这么多也不太好,毕竟2019年国家财政收入才19万亿。我建议用财政收入的5%,即1万亿,在加上社会资本1万亿,每年2万亿投入,8年即可完工!
  7. 晚上怎么办?靠月亮吗?
    电池,储能电池。另外晚上基本上工业用电木有了,再加上水能发电、核能发电等的补充,相信能够满足夜晚供电的需求。
  8. 收益?

    • 碳中和!一个几乎只用可持续的绿色能源的国家,子孙后代不愁环境污染
    • 一个基本上没有石油依存的国家,没人随便能源卡脖子
    • 带动国内相关产业发展,少说带动50万亿产业总量,增加相关就业人口1亿人
    • 相关技术出国国外,从产品制造、到技术研发、到设计服务,高低搭配,应有尽有,赚一堆外汇!

参考

  1. 国家数据 - 能源 - 能源消费量

如果你遇到了诸如

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

的错误,说明内存超标。

可以通过下面方法解决:

  1. 直接在node允许的时候加相关参数:
$ node --max-old-space-size=4096 yourFile.js

这里将程序可用的最大内存空间增加到了4GB,一般情况下够用了。也可以根据自己的情况更改。

  1. 将相关参数作为环境变量添加进系统;
  2. Linux/macOS:
export NODE_OPTIONS=--max-old-space-size=4096
  1. Window
$env:NODE_OPTIONS="--max-old-space-size=8192"

先看原来网站载入性能,Chrome Lighthouse得分6/100,可以说是没分数了:
微信截图_20200909160408.png

我们再看看生成的production环境js包大小:
微信截图_20200909203815.png

基本上违背了所有的前端最佳实践:

  1. 太多第三方Script (3.05MB)
  2. 整体JS体积太大了,一共13MB。而Opera Mini浏览器总共不过12.5MB,这个网站光js就比一个浏览器大。。
  3. 整体CSS体积太大了,4MB。
  4. 没有预加载等功能,整个网站需要下载玩这接近20MB数据,才能加载出来。

这个网站是Angular Cli 1.x的,首先升级到了1.7.4,将后端一些无用的接口删除,同时解决了大部分兼容问题,删去过不用和过时的package。然而似乎效果不大:
微信截图_20200912180931.png

由于Angular目前大版本号已经是10了,而1.7.4还是3年前的4。经过几年发展,已经跟以前很不一样。于是准备更新一下到9(考虑到兼容性)。但是也许是高估了Angular的向前兼容性或者1000+ Package的向前兼容性。升级到Angular Cli 9以后,经过两天接近30小时的修正,仍然运行不起来。太多地方要修改。。。

9.21 更新

可以通过使用 webpack-bundle-analyzer来分析build之后的包大小以及内容:

  1. 安装,为了防止不在PATH中,全局安装:npm i -g webpack-bundle-analyzer
  2. 创建stats.json,在build时增加一个--stats-json参数:
    ng build --prod --stats-json
  3. 分析:webpack-bundle-analyzer dist/stats.json(假如发布的文件夹为dist

可以得到下图:
bundle-ana.png

开启Gzip压缩传输内容,提高加载速度

由于网站的scripts和css一共将近17MB,不压缩传输实在是太忙了。发现IIS的确没有压缩,因为果断开启:

  1. 安装动态压缩功能和静态压缩功能
  2. 在IIS中开启相关设置

然后增加了22分呢:
微信图片编辑_20200922133633.jpg

9.22更新

秋分,发现用到了Salesforce的quill,并且在Angular的angular-cli.json配置里面。文件中的scripts全部都会被打包放入scripts.bundle.js作为全局scrpts。但是实际上只有一个demo页面,Primeng的p-editor在使用,果断删除。ng build --prod之后,scripts.bundle.js的大小缩减为了2.83MB

未完待续。。

https://docs.npmjs.com/cli-commands/prune.html
https://docs.npmjs.com/cli/dedupe
https://www.npmjs.com/package/@angular/compiler-cli
https://docs.npmjs.com/cli/shrinkwrap

这里列出一些数据/观点,供大家参考:

  1. statista上面有一个Size of the public cloud platform as a service (PaaS) market worldwide from 2015 to 2022 (更新时间 by Arne Holst, May 4, 2020):
    微信截图_20200609231949.png
  2. businesswire上面Global Platform as a service (PaaS) Market Report 2020 - ResearchAndMarkets.com (December 04, 2019 09:53 AM Eastern Standard Time):

The global platform as a service (PaaS) market was valued at about $29.58 billion in 2018 and is expected to grow to $52.4 billion at a CAGR of 15.4% through 2022.

  1. Gartner的[Gartner Says Nearly 50 Percent of PaaS Offerings Are Now Cloud-Only]4:

The total PaaS market revenue is forecast to reach $20 billion in 2019, and to exceed $34 billion in 2022, according to the latest forecast from Gartner.

  1. Planet Market Reports的[Platform-as-a-service PaaS Market 2019 | Global Market Size, Share, Supply, Demand, Segments and Forecast 2024]5:

The global platform as a service market size will grow by USD 31.4 billion during 2024.

可以看到各方数据/观点相差非常大(1-2倍),如果折中,则2020年全球PaaS市场规模应该在200-400亿美元左右。

微信截图_20200606131522.png

引子

心血来潮想看看Nginx的access日志,然而拉下来之后,打开几十万行的文件,无从下手。于是想找一个日志分析工作,能够达成以下目的:

  • 网络流量:某个区间范围内的入站、出站流量
  • IP地址,最好可以Geolocaiton一下知道物理位置
  • 访问设备、浏览器等信息
  • 访问的路由信息,比如访问了那个URI等

搜索了一下,发现其实有非常多的运维工作能够满足需求,但是最简单的还是GoAccess的方案。

GoAccess

微信截图_20200606131350.png

官网:https://goaccess.io/

GoAccess is an open source real-time web log analyzer and interactive viewer that runs in a terminal in *nix systems or through your browser.

It provides fast and valuable HTTP statistics for system administrators that require a visual server report >on the fly.

简单来说GoAccess可以直接对Nginx等程序产生的日志进行分析,然后直接可视化。这个过程比使用诸如ELK方案来得简单快捷

GoAccess功能特征

GoAccess解析指定的Web日志文件并将数据输出到X终端。功能包括:

  • 完全实时,所有面板和指标定时在终端输出上每200 ms更新一次,在HTML输出上每秒更新一次。
  • 跟踪应用程序响应时间,如果您想跟踪减慢网站速度的网页,会非常有用。
  • 支持几乎所有Web日志格式, GoAccess允许任何自定义日志格式字符串。
  • 支持增量日志处理,GoAccess能够通过磁盘上的B + Tree数据库逐步处理日志,保持数据持久性。
  • 可定制配色方案,Tailor GoAccess以适合您自己的色彩品味/方案。
  • 支持大型数据集,GoAccess 为大型数据集提供磁盘B +树存储,无法将所有内容都安装在内存中。
  • Docker支持,能够从上游构建GoAccess的Docker镜像。

安装和配置

安装

安装GoAccess的话,官网有非常详细的教程,可以点击这里(download)查看详情,这里以Ubuntu 16.04/18.04为例:

不要使用Ubuntu官方源, 使用GoAccess官方源:

$ echo "deb http://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list
$ wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install goaccess

配置

基本上不用配置,可以略去

简单使用和部署

在终端输出

定位到access.log所在文件夹,比如/var/log/nginx, 然后执行

# goaccess access.log -c

如果提示没有权限打开access.log文件,则需要使用sudo等命令提权

输出为静态报告

定位到access.log所在文件夹,比如/var/log/nginx, 然后执行

# goaccess access.log -o report.html --log-format=COMBINED

如果提示没有权限打开access.log文件,则需要使用sudo等命令提权

输出为动态报告

定位到access.log所在文件夹,比如/var/log/nginx, 然后执行

# goaccess access.log -o report.html --log-format=COMBINED

如果提示没有权限打开access.log文件,则需要使用sudo等命令提权

这样我们打开report.html即可以看到可视化的报告

多个日志文件的分析

Nginx一般会有多个日志文件,有得还gz压缩了,这时候需要使用:

$ sudo zcat -f access.log* | sudo goaccess -o /var/www/monitor/report.html --log-format=COMBINED --real-time-html

这种方式,将多个日志文件传入GoAccess

这样我们打开report.html即可以看到可视化的报告,我这里把html页面放在了web server上,可以直接通过web server访问

通过网络可以访问的实时日志记录

1. 配置Nginx

location /report.html {
    alias /var/www/html/report.html;
    # 下面三行是为了实现websocket
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

2. 使用Daemon模式启动GoAccess

# sudo zcat -f access.log* | sudo goaccess access.log* -o /var/www/html/report.html --real-time-html --time-format='%H:%M:%S' --date-format='%d/%b/%Y' --log-format=COMBINED --daemonize

我们加--daemonize参数是为了后台执行,执行这个的前提是有--real-time-html这个参数。如果我们是https的还需要添加--ssl-cert=crt文件目录 --ssl-key=key文件目录这两个参数才可以实现wss