2017年3月17日金曜日

Ruby(Rails) vs Python(Django&Cyclone&Japronto) vs Node.js vs ServerSideSwift vs GoLang vs Nim vs Rust vs VLang

2021年10月31日追記
2018年07月02日追記

■Python(Cyclone)は、C10K Ploblem Resolved(一万同時アクセス問題対応済みです。)
http://cyclone.io/
google翻訳結果はこちら
Githubはこちら
https://github.com/fiorix/cyclone/issues
ここにPython 3対応について書いてあります。

http://cyclone.io/documentation/overview.html
ここでC10K problemについて書いてあります。

https://ja.wikipedia.org/wiki/Tornado_(Web%E3%82%B5%E3%83%BC%E3%83%90)
ここで、Cyclone以外のフレームワークのベンチマーク結果が書いてあります。

■PythonJapronto)は、他の方のベンチマークによりますと一秒間に百万アクセス可能らしく、C10K X 100の性能になります。
英語の元のリソース
https://github.com/squeaky-pl/japronto

Google翻訳版
https://translate.google.com/translate?hl=ja&sl=en&tl=ja&u=https%3A%2F%2Fgithub.com%2Fsqueaky-pl%2Fjapronto
条件: AMD Opteron, 2.4 GHz, 4コア[1]
サーバセットアップ秒間のリクエスト数
Tornadonginx, four frontends8213
TornadoOne single-threaded frontend3353
DjangoApache/mod_wsgi2223
web.pyApache/mod_wsgi2066
CherryPyStandalone785
 Djangoが一秒間に  2,213件

Tornadoが一秒間に  8,213件

なのが分かり、

Cycloneが一秒間に10,000件


Japrontoが一秒間に1,000,000件


処理可能なのでJaprontoが素晴らしいのが分かります。しかし、2021年10月現在、Pythonは、まだ真のマルチコア、マルチスレッドには対応しておりません。

2018年、Javaは、大変高価な有料版となり、バージョンアップも激しくなり企業は、クライアント1万同時アクセス対応でメモリリークなどの問題も解決済みのでチームでの開発時もソースコードの統一感が出せて、コードの一定品質を保てるプログラム言語でNode.jsやJavaやGoLangと違ってガベージコレクションが無いので、処理が遅くなって固まりレスポンスが遅くなったりしないミッションクリティカル対応なプログラム言語としてRustとVLangもしくは、見た目はPythonで中身はRustで修正して高速化したPythonはオススメできます。もちろん非同期、マルチコア、マルチスレッド、C10K問題にも対応しております。


■Python(Django) Japronto
□メリット
Google、Youtube、NASA、JAXAなどでも採用されているので信頼性が高い。
無料のオンライン学習は、Python単体なら充実している・
比較的覚えやすい。
コードの視認性が良い。
チームで開発して他人が開発しても同じ様な非個性的なソースコードが出来上がりやすい。
自分でも他人でも数年後にでも読みやすく構造が理解しやすいのでメンテナンス性が良い。
AmazonでPython単体の本は割とあります。
オンライン学習は、PyQとパイザとUdemyには御座います。
Pythonは低速ですが、高速化の為に、サーバーサイドで、Rustを呼び出したりする方法も御座います。
もし可能ならば、見た目はPythonで、中身をRustで全て書き換えてもらえたら理想のプログラミング言語になると思います。高速で、AIのプログラミングならPythonが一番書きやすくAIのライブラリが充実しているからです。
どうせなら最初から言って欲しいと思うでしょう。
全て書き換えるなら、Python本体とフレームワーク、DATABASE、JavaScript(TypeScript)、GraphQL関連、Prisma関連なども見た目はその言語で、中身は全てRustで書き換えて欲しいと思います。もしお金持ちになれたらその様なプロジェクトを立ち上げたいです。そして無料のオープンソース版と有料のエンタープライス版の両方を開発したいです。
PEP8をチーム全体で利用すると開発効率やメンテナンス性が高いです。
https://www.google.com/search?q=Python%E3%80%80PEP8&sxsrf=AOaemvJdbGLO7bfa_Rh46TICt_YGk8xVCg%3A1635689133916&source=hp&ei=raJ-YZegNdf_-gSXz66oDA&iflsig=ALs-wAMAAAAAYX6wvVRPwZ-0WxkRyONTglh_Bka2MGzx&oq=Python%E3%80%80PEP8&gs_lcp=Cgdnd3Mtd2l6EAMyBQgAEIAEMgUIABCABDIFCAAQgAQyBQgAEIAEMgUIABCABDIFCAAQgAQyBQgAEIAEMgUIABCABDoHCCMQ6gIQJzoECCMQJzoLCAAQgAQQsQMQgwE6BwgAEIAEEAQ6CggAEIAEELEDEAQ6DQgAEIAEELEDEIMBEAQ6CAgAEIAEELEDOgUIIRCgAVDEGVjlP2CiQ2gCcAB4AIABZ4gB9AeSAQQxMS4xmAEAoAEBsAEK&sclient=gws-wiz&ved=0ahUKEwjXqqbu6PTzAhXXv54KHZenC8UQ4dUDCAo&uact=5

https://pyq.jp/ 

paiza (有料)
https://paiza.jp/works/django/primer

□デメリット
AmazonでDjangoの本が非常に少ないです。
Cycloneの本は無いです。
まだ、Djangoフレームワークの無料オンライン学習が少ない。

Python2のソースコードがまだ多く残っており、Python3に完全に移行できていないので、
Python2とPython3混在する環境はあまり良くない。
現時点では、処理速度はそれほど高速でないので一万同時アクセスを実現するにはサーバーの台数が必要になります。解決策としては以下の内容を参考までにどうぞ。
http://codezine.jp/article/detail/9918

Jythonの検索結果はこちら

Jython Cycloneの検索結果はこちら

Cyclone Python3の検索結果はこちら
有志のボランティアによりますと、CycloneのPython3のTESTは、
WebSocket以外は済んでおりますが、もし不具合が出る様なら、
sockjs-cycloneと言うのがGithubに御座います。
https://github.com/flaviogrossi/sockjs-cyclone
Google翻訳によりますと

SockJSとは何ですか?

SockJSはWebSocketのようなオブジェクトを提供するブラウザのJavaScriptライブラリです。 SockJSは、ブラウザと誤って設定された古いプロキシやファイアウォールなどを一貫して処理する、ブラウザとWebサーバ間の低遅延、全二重、クロスドメイン通信チャネルを作成する、一貫したクロスブラウザのJavaScript APIを提供します。フォールバックメカニズムとして他のトランスポートを自動的に使用することによって、
SockJSの主な機能:
  • できるだけWebSocket APIに近い単純なAPI。
  • スケーリングおよびロードバランシング技術;
  • 非常に高速な接続確立。
  • クライアント側の純粋なJavaScriptライブラリ、必要なフラッシュはありません。
  • サーバー側とクライアント側の両方で非常に広範なコードテストが可能です。
SockJS-cycloneはSockJSプロトコルバージョン0.3.3を完全にサポートしています。

Google、PythonのコードをGo言語に変換する「Grumpy」を公開


■Go言語
□メリット
一万同時アクセス問題に対応している最速のWEB言語である。
比較的覚えやすい。
シンプルである。
Go言語単体ならオンライン学習のスキルチェックはPaizaで充実しています。
AmazonでGo言語単体の本は割とあります。

□デメリット
ガベージコレクションがあるので、ミッションクリティカルや大規模なサービスには、向かないです。
機能を削りすぎてる感じがある。
Go言語のフレームワークを含めた無料のオンライン学習はまだありません。
AmazonでGo言語のフレームワークの本をまだ見かけません。(探し方が足りないかも知れません。)

■Swift(Server Side Swift)
□メリット
iPhoenとAndroidのスマホの業界標準の共通の開発言語となりました。
SwiftのスキルチェックはPaizaにあるようです。
プログラム言語の中で一番、GUIのライブラリが豊富で優れている様です。
AmazonでSwift単体の本は沢山あります。

□デメリット
Server Side Swiftの無料オンライン学習は、まだありません。
Amazonの本のServer Side Switの本は英語版しかありませんでした。(早く翻訳版が出ると良いですね。)
サーバーサイドWEB言語としては、まだ速度がそれほど早くない。
解決策として将来、SwiftをGo言語上で動作させる様に移植されるかも知れません。
http://codezine.jp/article/detail/9918

■Ruby(Rails)
□メリット
無料のオンライン学習がフレームワーク含めて充実している(外国語版含む)。
比較的覚えやすい。
プログラムしていて楽しい。
最初の開発は効率が良い。
Amazonにフレームワーク含めて本が沢山あります。
□デメリット
メンテナンス性が悪い。
特にチームでのメンテナンス性や他人の開発したソースコードのメンテナンス性が低い。
Ruby単体に比べ、Railsフレームワークをマスターするには、少し難しくなる。
一万同時アクセス問題、世界中からの同時アクセスに向かない処理速度の遅い言語なので、イントラネットなどアクセス範囲の狭い(少ない)場合に限られる。
Ruby(Rails)の遅さを解決するには、高速化したい部分をGo lamgで開発するか、
Go lang上でRubyライクなコードが書けるGobyで開発する方法が御座います。

ーーー

Goby(ゴービー)。Go lang上で動きます。Rubyのライクなコーディングが可能です。
https://neovisionconsulting.blogspot.com/2019/05/goby-100goruby.html

ーーー

■Node.js
□メリット
フロントエンドとバックエンドがJavaScriptでコーディング出来る。
一万同時アクセスに対応している(但し、Go言語の方が優れている。)
Amazonで本が充実しています。

□デメリット

ガベージコレクションがあるので、ミッションクリティカルや大規模なサービスには、向かないです。

引用元
http://qiita.com/hshimo/items/156249ec8e6dbf75205a
以下に上げたものも、解決策があるものが多いです。

はじめてのNode.js (2013年3月26日初版)

  • どこか1か所CPUリソースを多く消費するような重い処理が入ると、全体のパフォーマンスが低下する
  • マルチコア/マルチCPU環境を十分に生かすことができない
  • コールバックを多用するためにコードが複雑になる

merittyの記事 (2012年12年23日)

  • JavaScriptの限界、オブジェクト指向が不完全
  • マルチコアサーバで性能を十分に発揮できない
  • 文法エラーが、サーバーの停止を引き起こす
  • あるリクエストに問題があると、他のリクエストをブロックする

ZEALOT社員の方 (2012年10月29日)

  • まだ商用で使うには不安定な部分がある。
  • 開発者が少ない。 : JavaScript開発者がNode.jsの開発者ではない。
  • メジャーでもない。
  • 非同期処理なのでエラーハンドリングが難しい。
  • 基本的にシングルプロセスなのでどこかでシステムエラーが発生するとサーバダウン。
  • Hot deployができない。

GREE CTO藤本さん (2012年8月)

  1. ひたすらすごい勢いでバージョンアップしているので安定しない。コストを払ってついていく覚悟を持って取り組んでいる。
  2. メモリリークがあるので、サーバを起動しっぱなしにするとメモリが食いつぶされる。
  3. コードをデプロイしても再起動しないと読み込まれない。
解決策は、上記リンク先に書いてあります。

ーーーーーーーーーーーーーーーーーーー
プログラマーからレッスンを受ける場合は、Cloud9とSlackを同時起動して、先生のe-mailアドレスを入力して招待して利用する方法がありますが、
Cloud9には、Node.js、Ruby(Rails) 、Python(Django) 、Go言語(対応しているが設定が必要)。
但し、ServerSideSwiftは未対応の様です。
ーーー
関連情報
オンラインIT勉強会はいかが?&就職転職サービスなど
http://neovisionconsulting.blogspot.jp/2017/11/githubmeaniocloud9.html

コメント:JavaScriptが不完全なオブジェクト指向で限界がある点は、
TypeScriptを使う事で解決できるので御座います。

私がTypeScriptについて勘違いしていたこと、そしてその理由

参考URL:
http://postd.cc/i-was-wrong-about-typescript-here-is-why/
以下は、一部引用。
「TypeScriptの背景には、大きな犠牲なしに利点を得る方法を知る人々による偉大な考えがあった」ことに気付いたかを説明しようと思います。
---
以下は、参考までに
生まれたての新プログラム言語「Nim」と言うのもまだ実験運用段階ですが、
面白いですよ!
「Nim」は、Pythonの様な構文とC言語並みの処理スピードを併せ持つサラブレッドです。

イケてないのに人気がある golang vs イケてるのに人気がない Nim

http://wolfbash.hateblo.jp/entry/2017/10/02/163017
一部引用しました。
 Nim は Python に強い影響を受けていて文法は Python そっくりです。そのためスッキリ書けて非常に見やすいです。Python をブラッシュアップして、秘伝の悪魔のタレをかけたような感じです。
ーーー


19インチラックマウント上のメインフレーム(汎用機)の上で暗号化処理とDevOps環境を提供しながらLINUX上のシステムが動作します。

日本語版はこちら。

https://neovisionconsulting.blogspot.com/2020/03/19linux.html

ーーー
なぜ私達はPythonからGoに以降したのか?
https://frasco.io/why-we-switched-from-python-to-go-19581e27de7c

エーオン代表
石塚 正浩(WEBプログラマー)

ハイパフォーマー
https://www.high-performer.jp/

Daijob.com
https://www.daijob.com/
https://www.daijob.com/en/

0 コメント:

コメントを投稿