Pages

Tuesday, 31 March 2020

NIOSocks,基于java的Socks Proxy server程序


Background/About this project

NIOSocks is an open source Java NIO Socks Proxy Solution

Requirements

Java >= 1.6

Run

Run SocksLauncher with the parameter to the config file 'assembly/conf'

Forked from bitbucket

This repository is forked from https://bitbucket.org/schwid/niosocks

用以访问内网主机的工具-pagekite

Python implementation of the PageKite remote front-end protocols. 

This is pagekite.py, a fast and reliable tool to make localhost servers visible to the public Internet.
For stable releases and quick-start instructions, please see: https://pagekite.net/downloads/
The full manual is in the docs/ folder, or visible on-line here: https://github.com/pagekite/PyPagekite/tree/main/doc
Note: This program is under active development and the contents of this repository may at times be somewhat unstable. Stable source releases are archived here: https://pagekite.net/pk/src/

许小年演讲:欧美疫情一天不结束,中国出口企业没订单


中欧国际工商学院经济学和金融学教授

(本文为许小年教授3月26日晚在中欧校友总会上与校友的分享精要)

1、欧美疫情一天不结束,中国出口企业没订单

衰退是不可避免的,而且衰退时间会比较长。

中国防疫取得伟大成功,复工率其实没啥意思,订单在哪里呢。产能可开动了没有订单是没有用的。全球大家一起跟着走,防疫不那么紧张,经济形式还是一样严峻的。

现在的活是春节前的订单,四月份订单会马上锐减,经济活动进入半停滞,那作为第一大制造国,国内市场无法消化。

网上议论国际的很多说法是愚昧,他们的疫情一天不结束,我们就没订单,工人没有工资就没有消费。

后半段我们跑不了,要陪着全球走完防疫的全程。世界经济恢复正常,中国才能正常。

新冠疫情说明全球化一定要继续进行下去。再次证明全球化要继续推进,否则全球防不住疫情。

我们服务业遭受重挫,前两个月工业产出下降13.5%,消费品下降25%,服务业重灾区。一季度负增长是定局。我认为小于零,估计2季度也是负增长。

衰退周期一定超过2008年危机。

2、 千方百计救中小企业

企业唯一要做的就是要收缩下面讲如何应对,其实我也没啥好办法。经济好转要看年底了。

本来随着复工经济恢复正常,但是几十年的全球化中国经济已经离不开世界,世界经济也离不开中国,我们已经绑在一起。我们要跟全世界一起经历下半场。

我们无法关起门来自己玩。我们不仅缺粮食缺石油,我们缺市场,我们缺订单。我们的人均GDP是美国的1/5,欧洲的1/4,国内的购买力支撑不了我们如此庞大的制造能力。

我们还缺原材料,特别是技术含量高的基础原材料,必须从韩国从日本、德国进口。我们缺技术,关起门来技术无法快速发展。人均收入1万美元,劳动力成本已经不是40年前,必须有高技术含量的产品来支撑。

我们过去开放政策中迅速缩小技术差距,第一大功臣是开放政策。如果自己关门搞,没有希望。人均收入10000美元了,劳动力成本高了,需要高技术含量产品才能用得起。

不是用农民工的概念了,要用工程师。初级加工产品不能往下发展了。我们和发达国家的技术差距是关起门来搞不出来。包括互联网有今天的成就,是靠开放。

在全球抗疫过程中,企业唯一要做的就是要收缩,救企业。企业还在就有希望。一旦倒闭了就会很困难,企业没有十几年功夫是站不住的。财政政策在这点上要学习别人救中小企业。

中小企业占城镇就业80%,保住他们就是保住社会稳定。

3、脚踏实地一点,不要画饼充饥

讲下新基建。

这是画饼充饥,不要提这个馊主意了,脚踏实地一点,不要谈不着边的事情。30万亿50万亿的钱从何而来啊?

目前财政要减税的,财政已经很紧张,地方工资都发不出去。各地方政府胡报,银行贷款有债务风险。

宏观经济总体负债率260%,2015年去杠杆虎头蛇尾。要坚定不移去杠杆,问题都在滥发货币,鸦片止疼,但上瘾就依赖。

有钱为什么不直接给企业和老百姓,而去搞短期不见效益的项目,逻辑有问题。

所谓新基建,不着边的事情,八仙过海,前四仙,人工智能、云计算、工业互联网、北斗导航。这需要多少投资?厂房?设备?全投资在智力上的,拉动不了需求和就业。

几百万大学毕业生有几个能干这些活的?这些创造不了就业。除了北斗导航,其他不是政府干的事情。

后四个,5G,特高压,充电桩,高铁都是老基建了。不要过高估计5G应用,还有很长的路要走,生活端5G还用不到。

自动驾驶和工业互联网是关键应用,自动驾驶遥遥无期,工业互联网不是投资能够砸出来的,和消费互联网完全不同。

充电桩就是个加油站的概念,特高压高铁都是四万亿的活,老基建。

说到底,怎么办。企业谨慎经营,国家层面来说,过去的方针政策是对的,改革要需求,改革要效率,从改革要GDP。去杠杆可以放下,供给侧改革要继续推进。企业发展是关键,就业,需求的关键。

再说一遍:"保护私有产权,国退民进,放松管制,全面减税",反正我就这么几句。
------------

"保护私有产权,国退民进,放松管制,全面减税",共匪基本都做不到,只有减税方面,可能会减少一点点而已。

那個體制就是延禍世界的病毒

一個體制如果首先就是製造大量問題甚至災難的源頭,這樣的體制有何可取?就算它後來還可以處理到部分問題,但造成的損害與代價究竟應該由誰埋單?就算它可以關埋門把問題處理,受牽連的又可以向誰追究?這種所謂「舉國體制」,往往只是國民不幸的源頭,也是禍延世界的禍根!

柔性或剛性﹑人性或黨性:中外抗疫之異同


  武漢病毒流行全球,中共最壞的日子尚不知過去了沒有,而各國正苦不堪言。本來病毒對全人類一視同仁,中國遭難時,外國沒有袖手旁觀(比爾蓋茨捐三十億美金,美國一再表示要派專家),各國人民也都對中國人的遭遇表示同情。現在各國疲於奔命,中國卻不少人在幸災樂禍。
  很多中國人都說,歐美各國要向中國「抄作業」了,意思是中國成功了,中國怎麼做,各國也應該學習。當然,有個別國家採取了中國的封城隔離,但大部份國家都因應自己的國情和社會管理哲學去對抗疫癥。誰的方式在抗疫和對生命財產﹑社會秩序﹑經濟損失方面後果更好,現在還言之尚早,不過總有一些根本性的區別,可以稍作對照。
  一﹑唯上或唯下:疫癥流行之初,習近平一錘定音,專家有不同意見,到習近平那裡拍板。習近平要把消息壓到春節後才公開,全國一片歌舞升平。而歐美各國領袖,都聽取專家意見,專家的意見不一定全對,但始終外行領導內行風險更大。事實證明,地方和中央的雙重延誤,造成了中國疫癥大流行,禍及全世界。
  唯上唯下還表現在,中國是要維護習近平的光輝形象及中共的統治地位,一切都從這個「高度」去考量;歐美各國是將人民的生命財產安全放在第一位,從不考慮領袖和政府形象。特朗普有決策,只要民間反對就要修正,一切都將人民的利益置於最高位置。
  在中國是中共獨裁統治,權力無限,歐美政府是人民賦權,民意高於一切,這是中外抗疫的本質區別。
  二﹑野蠻抗疫或文明抗疫:中國實行的是一套野蠻抗疫的政策,上面定了調,下面粗暴執行,以各種非人性的手段,不理百姓的死活。封關以後,暴打出門的市民,用木條封死家門,拿大錘砸麻將枱和家具,結果造成人民實際生活和精神心理上的痛苦,使病毒肆虐的災難百上加斤。
  歐美各國實行的是文明的抗疫,一切以法律和人性為出發點,大部份政策只作呼籲,不作強制,最多也就是罰款了事;另外,政府也盡量保持疫癥其間人民的正常生活。美國中小學生午餐是學校免費供應,在停學期間,政府負責把午餐送到每個學生家中,以防止窮苦家庭因父母要返工而讓孩子挨餓。  
  三﹑救助人民或救助政府:疫情惡化後,歐美各國政府都推出緊急救助撥款给个人,政府依收入標準對每位國民和孩子發現金,解決燃眉之急,聊補無米之炊。相反的,中共只把數萬億資金用來發展基建,目的是擴張基建避免失業,維護政權安全,但如此一來,民間困苦只好望天打卦。
  四﹑資訊流通或資訊封閉:疫癥大流行後,歐美各國每天都由專職機構發佈準確的信息,總統首相一兩天就面對公眾,介紹政策,接受質詢,聽取意見,修正對策。相反的,中共基本上對內實行消息封鎖,甚至抓捕訓誡「吹哨人」,流言四起,官民離心。
  歐美各國媒體每天都批評政府,使政府警覺,努力補救各方面措施的不足。相反的,中共控制社會輿論,全國上下一種聲音,下情不能上達,官員為自保反映遲鈍,造成大量社會悲劇。
  五﹑地方聽中央,或中央聽地方:在歐美,中央政府層面只在自己職權範圍內推出各種措施,中央與地方有分權,地方未必全聽中央的。特朗普與紐約市長在資源調配和抗疫措施方面意見不同,通常特朗普要讓步。兩人分屬不同政黨,還是要服從人民整體利益。
  在中國,地方只能服從中央。地方無法自主,又要維護地方利益,不同省市互相歧視發生衝突。中央一錘定音,而各地情況有別,政策離地,效果自然參差。  
  歐美之外,在亞洲,日本﹑韓國﹑台灣,也都採取柔性的政策,避免剛性的破壞,目前看來效果也相當正面。
  民主國家與獨裁國家,在處理疫癥上有如此分別,受益或受害各有因果。疫癥過去後,全世界都會進行一次意識形態和國家體制的大反思.

欧洲是天下中心,是科学、艺术、政治、工业、一切革命的诞生地

有本书《二十世纪知识史》(The modern mind by Peter Watson),将佛洛伊德奉为现代西方第一人,也说人类进入现代之际遭遇了三次挫折:第一次是哥白尼发现地球并非宇宙中心;第二次是达尔文发现人类并非超越于动物界,而是与其他动物一样服从"生物演化"自然法则;第三次即佛氏,发现我们头脑里有许多未知的、潜意识的、甚至不可控制的力量。
若论"挫折",第一次世界大战居然是所谓"现代"的一个缘起,而不是什么"文艺复兴",这场意外的大厮杀,以其血腥而引领了西方所有蓓蕾初开的科学门类之幸逢其时、大显身手。1916年7月,索姆战役(battle of Somme,966公里,从比利时海岸穿过法国到瑞士的漫长战壕)一打响,十一万英军在十三英里长的战线上发起进攻,第一天伤亡六万人,超过两万尸首横卧无人区。英军总共损失37万人,平均每天七千人,战后英军有一半人的年龄在19岁以下,人称"失去的一代"。
说它"意外",是因为1914年正是十九世纪将西方文明引向峰巅的起点。"这个文明,在经济上是资本主义,法律宪政结构上属自由主义(liberalism,其典型的支配阶级,则为资产阶级中产阶级。科学、知识、教育、物质的进步,以及道德的提高,都在其中发光发热。这个文明,也深信欧洲是天下中心,是科学、艺术、政治、工业、一切革命的诞生地。"
但是这个文明在四十年间,发生两次世界大战,几乎没人相信它还能存活。作为它崩溃的后果,又有两股浪潮兴起——法西斯主义和共产主义,试图取代资本主义社会的制度,伴随着动乱和革命浪潮登台,席卷了全球三分之一人口和六分之一面积。自由资本主义只有与共产主义联手,才能击败法西斯主义,这段"资""共"合作时期不啻为二十世纪最诡谲的一刻——若无共产主义(苏联)付出的代价,西方自由主义政体恐难存活于法西斯主义;二战后也因为苏俄的存在和刺激,资本主义才获得灵感,幡然图新。若不是十九世纪资产阶级社会的解体,也不会有十月革命和苏联。
犹太作家莱维(Primo Levi)说得最精粹:
"我们侥幸能活过集中营的这些人,其实并不是真正的见证人。这种感想,固然令人不甚自在,却是在我读了许多受难余生者,包括我自己在内写的各种记载之后,才慢慢领悟。多年以后,我曾重读自己的手记,发现我们这一批残存的生还者,不但人数极为稀少,而且根本属于常态之外。也许是运气,也许是技巧,靠着躲藏逃避,我们其实并未陷落地狱底层。那些真正掉入底层的人,那些亲见蛇蝎恶魔之人,不是没能生还,就是从此哑然无言。"
由此艾伦•布卢姆(Allan Bloom)的愤怒是有道理的。他痛恨摇滚乐,认为是野蛮,尤其对于儿童,潴留于性、仇恨、讨好、伪善,没有任何高尚、庄严、深刻和细腻,"我觉得它毁灭年轻人的想象力,使之对艺术难以再产生热情,而这就是liberal教育的实质。"他还说这跟毒品完全一样。他也申斥女性主义,一种新的心理学(行为科学),年轻一代热衷一切事物的平等,却又特别在种族方面。
他以教师的经验,观察五十年代至八十年代美国大学生的品行明显改变,学校也随之变得更糟,他写了《美国精神的封闭》(the closing of the American mind)这本书。五十年代相比于混乱的欧洲,美国大学是世界上最好的,五十六十两个十年的繁荣造就的学生,爱冒险且认真,有理想和知识渴望,是大学的主要氛围。从六十年代晚期衰落开始,并且也是美国文明的衰落。
他说自由和理性,这些今人享受的礼物,都是靠前人思考、搏斗而来的——不像毒品文化和街头文化——是深刻、理智、平等获得的,其作为智性是整体性的。
许多社会科学的理念的发现和再发现,主要是德国思想家介绍的,如黑格尔、康德、尼采、韦伯、胡塞尔、海德格尔,一个严肃的生命,意味着清醒地意识到我们所面对的选择:理性/革命,自由/匮乏,善/恶,自我/他者,此即文学所谓的"悲剧"。他也调查,哲学家如柏拉图、阿里斯多德、罗素、洛克等,在学生中间还有多大影响;他也批评大学玩忽职守,割裂理性,自保于日益"政治正确"的世界:
"哲学的本质是放弃所有权威,而独钟于个体的理性……大学必须蔑视公共见解,因为它必定使之得以自保,去探索甚至发现真理,它必须专注于哲学、技术、人文,专注于科学家如牛顿、笛卡尔、莱布尼兹,他们具有科学的综合视野并致力于整体的秩序,如此便有助于保存那些在民主制似乎被忽视的东西。"
布卢姆遭致许多同行的憎恨。
以赛亚•伯林1997年临终前不久,答BBC记者问一生中何事令其最惊异:
"我苟全性命于乱世而已,这个世纪之糟未曾有过,野蛮无人性,毫无理由地毁灭……但假如我们把眼光从恐怖丑恶移开,则人类智性趋势之深远发展也是明显的,科学改变了人类的思想,成为人类的主要活动,成为一种象征,一种道德权威。科学的一个明显结果是技术进步,其哲学影响却常被忽略,它不像宗教和政治理论那样许诺改善全球人类的条件,而是逐步、渐进地向个人提供对生活的强大的控制手段和自由.

socks代理服务器程序:socks5-by-glftpd

How to compile

Just type make clean linux Needs g++ and openssl + header files.

How to setup

Copy socks5.conf.dist to bin/socks5.conf and edit

How to start

To start with uncrypted conf: ./socks5 -u socks5.conf
To start with crypted conf: ./socks5 socks5.conf (encrypt the conf using the blowcrypt tool in bin)

Parameters in conf file

[ Debug ]
debug=0; - turn debugging on/off
log_to_screen=1; - print debug msgs to screen or to file
debug_logfile=log.txt; - debug logfilename

[ Connection ]
listen_port=123; - listen port
connect_ip=; - bind to special ip when connecting
listen_ip=; - bind to special ip when listening
listen_interface=eth0; - interface to get ip from if listen_ip is not specified
bind_port_start=40000; - port range used for bind method
bind_port_end=45000;

[ User ]
nr_users=1; - how many users in conf file
USER1=hawk; - username
PASS1=test; - userpass
IDENT1=hawk; - if specified user must have this ident
SOCKSIP1=; - if specified socks5 uses another socks5 to conenct to target - specify login options below
SOCKSPORT1=;
SOCKSPASS1=;
SOCKSUSER1=;
USERIP1=; - if specified user must have this ip(s) - can use ? and * but not - (ranges) - list of ips seperated with ,
ALLOWEDIP1=; - if specified socks5 will only connect to this ips
BANNEDIP1=; - if specified this target ips are not allowed
OIDENT1=1; - 1 to enable oidentd feature - 0 to disable
OIDENTIDENT1=; - use this ident with oidentd every time (else users ident is used)

change options below only if you know what you're doing

[ Limit ]
day_limit=0; 
week_limit=0;
month_limit=0;

[ Advanced ]
oidentpath=/home/hawk/.oidentd.conf; - if you want to use oidentd spoofing enter path to users .oidentd.conf file including filename here
oidentdelay=3; - delay in seconds before restoring old .oidentd.conf - 0 if you want it not restored
buffersize=4096;
pending=50;
connect_timeout=7;
ident_timeout=5;
read_write_timeout=30;
uid=1;
pidfile=socks5.pid;
retry_count=10;
no_ident_check=0; - if enabled no ident request is made - dynamic ident with oidentd wont work
frm https://github.com/glftpd/socks5

socksmon


Monitor arbitrary TCP traffic using your HTTP interception proxy of choice.

What is socksmon?

socksmon is a SOCKSv4 server based on Twisted, that tunnels incoming TCP traffic through an HTTP proxy. socksmon does this by starting an internal webserver on port 2357, posts the traffic to using the man in the middle proxy for editing it and then it forward it to the destination.
socksmon has preliminary support for SSL interception, meaning arbitrary ssl encrypted tcp traffic can be analyzed using your interception proxy of choice.

How do I use it?

First you need to create a certificate you would like to use with socksmon in PEM format and put it under /tmp/server.pem. If you use BURP, export the private key and the certificate and then concatenate them together. (e.g. cat server.crt server.key > /tmp/server.pem)
Second, start your interception proxy with port 8080 on localhost.
Third, send SOCKSv4 traffic to yourip:9050. Be sure to use SOCKSv4, SOCKSv5 won't work due to the Twisted SOCKS server implementation. For redirecting traffic I recommend Proxifier1 under Windows and Redsocks2 or Proxychains3 under Linux.

使用基于rust的bit-tunnel翻墙

在linux vps上。运行curl -sSf https://sh.rustup.rs | sh ,安装rust环境。
然后,rustup update ,更新rust的版本。
git clone https://github.com/bit-ranger/bit-tunnel bit-tunnel-by-bit-ranger
cd bit-tunnel-by-bit-ranger
cargo build --release

待此步骤完成后,在当前directory下,会生成target/release ,
cd target/release
./server -l 0.0.0.0:2488 -k mykey
不过此command 是运行在前台的,我们可以用systemd把它运行为服务:
nan/etc/systemd/system/bit-tunnel.service
cat /etc/systemd/system/bit-tunnel.service
[Unit]
After=network.target

[Service]
WorkingDirectory=/root/bit-tunnel-by-bit-ranger/target/release/
ExecStart=/root/bit-tunnel-by-bit-ranger/target/release/server -l 0.0.0.0:2488 -k mykey
Restart=always

[Install]
WantedBy=multi-user.target

然后运行:
systemctl start bit-tunnel
systemctl enable bit-tunnel
服务器端搭建完成。

在本地机器mac上。
运行curl -sSf https://sh.rustup.rs | sh ,安装rust环境。
然后,rustup update ,更新rust的版本。
git clone https://github.com/bit-ranger/bit-tunnel bit-tunnel-by-bit-ranger
cd bit-tunnel-by-bit-ranger
cargo build --release

待此步骤完成后,在当前directory下,会生成target/release ,
cd target/release
./client -s vps-public-ip:2488 -l 127.0.0.1:3456 -k mykey
不要关闭此终端窗口。
设置browser的socks5 proxy为127.0.0.1 ,端口为3456,browser即可翻墙。

https://github.com/bit-ranger/bit-tunnel/issues/3
---------

bit-tunnel的翻墙速度不快,建议使用socks5-proxy-by-yuanrenguang715,详见:



ten Ways to Stop Translating in Your Head


EnglishClass101.com

对于提高英语听力很有帮助。

https://www.youtube.com/channel/UCeTVoczn9NOZA9blls3YgUg

Golang 微服务框架系列 - 1, Micro 框架使用方式以及架构

Micro 介绍

Micro 是一个工具集合,通过将微服务架构抽象成一组工具。隐藏了分布式系统的复杂性,为开发人员提供了更简洁的概念。

组成

Micro 主要有三部分组成:
go-micro - 开发 sdk, 包含了 RPC 框架,服务发现,消息订阅 / 发布 等功能.
go-plugins - micro 插件
micro - Micro 提供的管理工具,包含了 API 网关,仪表盘,RPC 代理等功能.

go-micro

Micro 的主要开发 SDK, 里面包含了开发所用到的常用功能模块,主要模块之间关系如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 (img-aMoGDYQl-1585099608719)(https://micro.mu/docs/images/go-micro.png)]
模块说明
services微服务,提供了对微服务功能开发的封装,通过它可以快速创建一个微服务.
clientRPC 客户端,提供了诸如 服务发现 / 负载均衡 / RPC 代理和调用。以及失败时的重试 / 超时 / 上下文等功能。
serverRPC 服务端,提供了如何实现 RPC 请求的方法,功能逻辑主要使用这个实现.
codec数据编码 模块,提供将程序调用数据转换成 RPC 调用数据的功能。目前支持: json /protobuf
brokerpub/sub 模块,提供事件 发布 / 订阅 功能,目前支持: nats /rabbitmq/http (开发)
transport数据传输 模块,通过抽象实现对传输协议的无缝替换。目前支持: http /rabbitmq/nats
regediry服务发现 模块,提供 集群的服务发现功能,目前支持: consul /etcd/memory /kubernetes
selector负载均衡 模块,当 client 发出请求时,它负责在多个满足条件的服务器列表中决定使用哪个服务器,目前支持:循环 / 哈希 / 黑名单

go-plugins

没研究…

micro 工具

micro 工具 是 Micro 提供的一个管理工具,主要分为以下几个功能:
命令说明
apiAPI 网关,将 HTTP 请求转换为 RPC 并转发给相应的服务。
webmicro 提供了一个默认管理界面,并且已 HTTP 方式提供了 对 srv 服务的代理。
new生成模板代码,帮助你快速创建项目.
cli可以通过命令行来和 micro 交互.
bot机器人?具体的还没有接触
proxy代理?还没研究清楚

micro-api

API 网关或代理,将 HTTP 请求转换为 RPC 并转发给相应的服务。以便使用一个入口点来访问微服务.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 (img-WUJkzbR1-1585099608728)(https://micro.mu/docs/images/api.png)]
使用入门:
  • 安装

1
go get -u github.com/micro/micro

  • 运行
    1
    micro api
使用 ACME
需要设置环境变量: MICRO_ENABLE_ACME=true

1
2
3
4
5
6
7
8
9
10
linux:
 MICRO_ENABLE_ACME=true micro api
windows:
 set MICRO_ENABLE_ACME=true && micro api
 
也可以指定主机白名单:
linux:
 MICRO_ENABLE_ACME=true \
 MICRO_ACME_HOSTS=example.com,api.example.com \
 micro api

开启 HTTPS
需要设置环境变量: MICRO_ENABLE_TLS=true

1
2
3
4
5
linux:
 MICRO_ENABLE_TLS=true \
 MICRO_TLS_CERT_FILE=/path/to/cert \
 MICRO_TLS_KEY_FILE=/path/to/key \
 micro api

设置命名空间
默认名称空间为 go.micro.api, 名称空间和路径用于解析服务名称 / 方法

1
2
linux:
 MICRO_NAMESPACE=com.example.api micro api

micro-web

提供了一个仪表盘以及对服务的查看和查询功能。并且提供了一个对 rpc 的反向代理.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 (img-vQfc6Q2z-1585099608729)(https://micro.mu/docs/images/web.png)]
API:

1
2
3
4
- / (UI)      - 仪表盘
- / rpc       - RPC 代理
- / stats     - 相关统计信息
- / [service] - 查看和查询服务

使用入门:
  • 安装

1
go get github.com/micro/micro

  • 运行
通常

1
micro web

使用 ACME 加密

1
2
3
micro --enable_acme web
也可以指定主机白名单:
micro --enable_acme --acme_hosts=example.com,web.example.com web

开启 HTTPS

1
micro --enable_tls --tls_cert_file=/path/to/cert --tls_key_file=/path/to/key web

修改默认命名空间
默认名称空间为 go.micro.web , 名称空间和路径用于确定反向代理代理的目标

1
micro web --namespace=com.example.web

开启统计功能
可以通过 –enable_stats 标志启用统计信息,通过 /stats 访问

1
micro --enable_stats web

在 Micro 架构中,一个完整的请求流程是这样的:
api-gateway => [customer-api | customer-web ] => customer-srv
其中 api-gateway 是 有 micro 工具直接提供的,customer-(api | web | srv) 则是 micro 中的开发概念.
在 micro 中,服务分为三种类型.
名称说明
srvsrv 是标准的 RPC 服务,也可以叫做后端服务,开发人员通常写的就是这种类型。在 Micro 的设想中,这一服务永远不会面向用户,属于内部服务.
api提供 HTTP 到 RPC 的转换服务,API 网关默认情况下会将请求转发给它来处理.
webMicro 认为 web 也可以当做微服务来创建

请求处理流程


Golang 微服务框架系列 - 2, Micro 框架的安装以及运行示例

Micro 介绍

Micro 是一个工具集合,通过将微服务架构抽象成一组工具。隐藏了分布式系统的复杂性,为开发人员提供了更简洁的概念。

依赖关系

通常 micro 会依赖两个项目
  1. consul - 服务发现
  2. protoc-gen-micro - 代码生成
consul 安装运行:

1
2
3
4
source:
 go get -u -v github.com/hashicorp/consul && consul agent -dev
docker:
 docker run consul

protoc-gen-micro 安装:

1
go get -u -v github.com/micro/protoc-gen-micro

开发环境

  • 开发微服务的框架:
    1
    go get -u -v github.com/micro/go-micro
  • 管理工具:
    1
    2
    3
    4
    source:
     go get -u -v github.com/micro/micro
    docker:
     docker pull microhq/micro

运行示例

  • 获取示例源码:

1
go get -u -v github.com/micro/examples

  • 运行 greeter 示例服务:
    –registry_address=127.0.0.1:8500 用来指定服务发现的地址,就是上面的 consul 的地址,consul 默认端口是 8500
    1
    go get github.com/micro/examples/greeter/srv && srv --registry_address=127.0.0.1:8500
  • 通过命令行验证:
获取服务列表
–registry_address=127.0.0.1:8500 用来指定服务发现的地址,就是上面的 consul 的地址,consul 默认端口是 8500

1
2
3
$ micro --registry_address=127.0.0.1:8500 list services
consul
go.micro.srv.greeter

获取服务详细信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ micro get service go.micro.srv.greeter
service  go.micro.srv.greeter

version 1.0.0

Id Address Port Metadata
go.micro.srv.greeter-34c55534-368b-11e6-b732-68a86d0d36b6 192.168.1.66 62525 server=rpc,registry=consul,transport=http,broker=http

Endpoint: Say.Hello
Metadata: stream=false

Request: {
 name string
}

Response: {
 msg string
}

尝试调用服务

1
2
3
4
$ micro query go.micro.srv.greeter Say.Hello '{"name": "John"}'
{
 "msg": "Hello John"
}


Golang 微服务框架系列 - 3, 使用 Micro 框架生成并编译运行第一个 srv服务


Micro 介绍

Micro 是一个工具集合,通过将微服务架构抽象成一组工具。隐藏了分布式系统的复杂性,为开发人员提供了更简洁的概念。

通过 micro 创建项目:

1
2
3
4
micro new --type "srv" \
          --namespace "com.test" \
          --alias "first_srv" \
          github.com/micro/examples/first_srv
命令会生成一个 工程目录,包含了一些通用代码,目录结构:
1
2
3
4
5
6
7
8
9
10
11
├── main.go
├── plugin.go
├── handler
│   └── example.go
├── subscriber
│   └── example.go
├── proto\example
│   └── example.proto
├── Dockerfile
├── Makefile
└── README.md

安装 protobuf:

  1. 去 https://github.com/google/protobuf/releases 下载对应平台的 protobuf 包
  2. 把 bin 目录添加到 PATH 环境变量中.
  3. 在命令行中运行 protoc , 如果提示命令未找到检查 protobuf 是否安装成功.

安装 protobuf 代码生成相关库:

1
2
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
go get -u github.com/micro/protoc-gen-micro

通过 proto 文件生成 go 代码:

1
2
cd $GOPATH\src\github.com\micro\examples\first_srv
protoc --go_out=. --micro_out=. proto/example/example.proto

运行:

1
2
3
4
$ go build github.com/micro/examples/first_srv && first_srv
2018/06/17 13:26:13 Listening on [::]:9040
2018/06/17 13:26:13 Broker Listening on [::]:9041
2018/06/17 13:26:13 Registering node: com.test.srv.first_srv-f325ad49-71ee-11e8-a4a2-7054d2dea53d
由于使用的是服务发现,所以上面打印的端口在你机器上可能不一样,因为端口是随机的,但不影响正常运行.