JPoint 2017は成功した䌚議です。 最高のオヌプンアクセスレポヌトの抂芁

最近、同僚が「䌚議に行く理由」ず「YouTubeでビデオを芋る理由」に぀いお既によく知っおいる質問をしたした。 これは友人であり、arbitrary意的な人物ではないため、より詳现に、詳现に、そしおニンニクに぀いお答えたいず思いたした。 残念ながら、ラむブモヌドでのラむブモヌドでは、これを行うのは困難です。すべおの詳现に぀いおは蚀及したせん。 䞀方、これはハブポストに最適なトピックです。詳现なレビュヌを1回曞いおから、真の瀟䌚恐怖症者ずしお、Habrぞのリンクですべおの質問に答えるこずができたす。


アむデアは簡単です。JPoint2017から最も人気のあるレポヌトを入手し、それが䜕であるか、なぜそれがクヌルで、なぜ私がそれを個人的に必芁ずするのかを簡単に蚀い盎しおください。 これらの各レポヌトは個別の分析に倀したすが、最初はトップ10の簡単な抂芁です。 行こう




興味深いこずに、この䌚議で2぀の基調講挔がトップになりたした。 基調講挔は、定矩により、䌚議の粟神ずトヌンを蚭定したす;圌らは「むンスピレヌション」ず「自分の芖野を広げる」ために蚭蚈されおいたす。 狭い技術䌚議で基調講挔を行うには、これを行う必芁がありたす。 ただし、それらはすべおここにありたす。 プログラム委員䌚はこれを簡単な方法で達成したした。最初の基調講挔は䌝統的に人気のある科孊ポップであり、2番目はシピレフ講挔者-再犯者、最高のレポヌトの連続メヌカヌです。


レポヌトを芋たずきの気持ちを比范するために、それぞれの隣に䌚議参加者の平均評䟡が衚瀺されたす。


10. 集団的なし責任の問題


スピヌカヌAlexey Savvateev; 評䟡4.38±0.04。



科孊、特に数孊ずゲヌム理論の普及者からの鮮明なレポヌト。 このレポヌトは、私たち自身の研究ず、オリバヌ・ハヌトずベンクト・ホルムストロヌムの研究2016幎ノヌベル経枈孊賞、契玄理論に䞎えられたものに基づいおいたす。


たず、ゲヌムの理論ず契玄に関する基本的なこずを忘れたたたは知らなかった人のために、いく぀かの入門情報が提䟛されたす。 これにより、基調講挔ず「ハヌドコア」ずが区別されたす。著者は「倧孊で倧孊に合栌しなかった人は誰でも立ち䞊がっおホヌルを去った」ずは蚀いたせんでした。 代わりに、圌は䟋でトピックを簡朔か぀わかりやすく説明しおいるので、誰にでも明らかになりたす。 たずえば、契玄の理論は次のように䜿甚できたす䜕らかの皮類の通垞のコヌディングオフィスがある堎合、すべおの関係者劎働者、雇甚䞻などのモデルが構築され、将来、雇甚䞻は盎接泚文を䜿甚しおこのシステムを管理できなくなりたす。そしお、现かく遞択された刺激を䜿甚したす。


アレクセむは、そのような契玄の倚くの䟋を挙げおいたす。 たずえば、誀っお遞択したルヌルを䜿甚しお、誀っお車の亀通をブロックする方法に぀いお説明しおいたす。 芁するに、䞀般的なタスクはプロセスを正しく敎理する方法です。


䞀連の䟋を䜿甚しお、タヌンスタむル問題の䟋を䜿甚しおナッシュ均衡を説明したす。 ナッシュは、映画「マむンドゲヌムズ」の䞻人公だった同志であり、1994幎にノヌベル経枈孊賞、2015幎に数孊のアヌベル賞を受賞したした。ゲヌムの均衡の存圚に関する非垞に䞀般的な定理を蚌明したした。 お金やその䟡倀に察する信頌、倧孊での教育の質に察する盞察的な信頌などの実際の䟋が瀺されおいたす。


レポヌトの途䞭でAlexeyが聎衆ず䞀緒にブレむンストヌミングを䌁画したこずは非垞にクヌルです。そしお、聎衆の䞭に䌚話をサポヌトできる人々が本圓にいたした。 通垞、このような詊みは哀れに芋えたすが、この堎合、それらはレポヌトの䞀郚であるように思われたした。 残念ながら、これをレコヌドで感じるこずはできたせんが、これは私がラむブで出垭した数少ないレポヌトの1぀です。 たずえば、この圢匏では、タヌンスタむルの問題の2番目の郚分に぀いお説明したした。




そしお最埌に、これに基づいお、レポヌトの䞭心的なトピックに進みたす。高レベルの腐敗を䌎う脱皎の問題を解決するためにスピヌカヌに求められた方法です。 モデルが構築され、問題が圢匏化され、その問題はゲヌム理論の枠組みの䞭で解決されたす。その間に、非垞に興味深い結果ず芳枬がいく぀か芋぀かりたす。


䞀般的に蚀えば、これは重芁な蚘事であるはずでしたが、ゲヌム理論の私の知識が圌の戊堎で本物の科孊者を批刀するのに十分ではないこずは明らかです。 圌は正しいモデルを遞択したしたか 蚈算は正しいですか はい、地獄は知っおいたす。 たず第䞀に、著者の考え方に倢䞭になりたした。これは、レポヌトのビデオ録画ずラむブコミュニケヌションの䞡方で远跡できたす。 この考え方は手曞きのようなものです。


いずれにせよ、すべおのプログラマヌがプログラミング蚀語でモデリングの問題を解決したすが、Alexeiの堎合、非垞に高床な数孊的抜象化によっお匕き出される非垞に耇雑な実際の問題に぀いお話しおいるため、非垞に盎感に反する結論を構築し、実際にテストするこずができたす。 私にずっお、このレポヌトの基調講挔の䟡倀はたさにこの䞭にありたす。異なる目で単玔なものの「マトリックス」を芋始めたずき、突然の啓発ず掞察の瞬間に。



9. パフォヌマンス私の名前は䜕ですか


スピヌカヌAlexei ShipilevRed Hat; 評䟡4.38±0.03。



別の基調講挔、今回はパフ​​ォヌマンスに぀いお。 たず、Leshaは開発を成功させるための基準に぀いお説明したす。 もちろん、ビゞネスの䞻な基準は略奪であり、プログラマヌは倧量の生地を皌いでいるず蚀っお、有胜に聎衆にこだわりたす


芳客はお䞖蟞から回埩しおいたせんが、砲撃は譊備員ずのコミュニケヌションなど、もっず悲しい技術的なこずから始たりたす。 プロゞェクトの成功に最も圱響を䞎えるパフォヌマンスは、最も重芁なこずではないず結論付けられたす。 パフォヌマンスに埓事しおいる男からこれを聞くのは面癜いです-通垞、すべおのシギは圌の沌を賞賛したす。


次に、正しいプログラムず高速プログラムが比范され、 名前がcurveの曲線のスラむドが衚瀺されたす。 私芋、このスラむドは、すべおの䞀般的な画像で自分自身を芋぀けるこずができる最も啓発的な瞬間の䞀぀です。 レポヌトのスラむドを1぀だけ衚瀺したい堎合は、ここにありたす。




Leshaは、ダむアグラムのすべおのレベルを泚意深く芋おいきたす。個人的には、これらの考慮事項は非垞に明確な甚途を持っおいたす。 たずえば、これは、パフォヌマンス戊略を定矩し、「正垞なプロファむルを䜜成するか、たったくプロファむルを䜜成する必芁がない」グリヌンゟヌンにいる堎合などの有害な発蚀に察凊するための十分に圢匏化された匕数のリストです。 鞭はたた、すべおの玛争の䞻な議論ずしお「時期尚早な最適化」で議論されおいたす。 そしお、䞊叞ぞのパフォヌマンスを向䞊させるために䜜品を販売する方法。 そしお、新しい超高速デヌタベヌスなど、ナヌザヌが䜕らかのゲヌムを販売するようになったずきにどうするか。


いく぀かのスラむドを台無しにしたす。






そのようなスラむドは想像を絶する量があり、それは特城的です-それらはすべお厳密にケヌスにありたす。 これは、䞀般に、これによっお生蚈を立おおいる男に期埅されるこずでした。 これはある皮の極秘の知識であるずは蚀いたせんが、私にずっおの䟡倀は最も明確でなめらかな蚀葉遣いず情報の敎理にありたす。


もちろん、䟋は困難です。コンパむル速床が2分から8分に䜎䞋したjavacのコヌドの䞀郚、 Amdalの法則ずUniversal Scalability Lawによる蚌明など。 レシャは他の䟋をどこで手に入れたすか


䞀郚のパフォヌマンスの専門家は珟圚、スピヌカヌに察するandみを抱いおいるのではないかずいう疑念がありたす。あるレポヌトでは、圌はすべおの䞻芁な秘密ず協議のトピックを通過したからです。


8. コトリンの未来戊略ず戊術


スピヌカヌAndrey BreslavJetBrains; 評䟡4.41±0.08。



コトリンに぀いお䜕も聞いたこずがないのは誰ですか たあ、間違いなく私たちではありたせん。 すべおのニュヌスはコトリンでいっぱいで、むンタヌネットは掻気づいおいたす。そしお、このプロゞェクトの責任者であるAndrei Breslavが光の䞭で私たちにやっお来たす。 アンドレむは、蚀語ずプラットフォヌムの将来に぀いお具䜓的に語っおいたすので、圌は間違っおいるかもしれたせんが、このレポヌトはそれをそれほど䟡倀のあるものにしおいたす。


たず、Andreiが補品に代わっお実際に話すこずができるのは興味深いこずです。 圌は垂堎ですぐに話をするこずができたすKotlinはScalaでビッグデヌタのために戊うかどうか、Pythonでデヌタサむ゚ンスのために戊うかどうか。 最初のスラむドで、「私たちの信条JVM、JS、およびネむティブプラットフォヌム向けの産業甚プラグマティック蚀語盞互運甚、ツヌル、安党性」-ず蚀うこずです。 このスラむドでは、JVM以倖のプラットフォヌムのサポヌトが真の優先事項であるかどうかのトピックに関するチャットルヌムでのディスカッションを終了できたす。


すぐに、Andreiは、どのプログラムもどのプラットフォヌムでも実行できるようにしようずしおいるのではないず説明したす。 「䞀床曞いお、どこでも実行」はJava甚であり、Kotlinitesはこれを行いたせん。 これは貎重なモザむク䜜品でもあり、すでにKotlin指向のアヌキテクチャを蚭蚈しおいる人にずっおは貎重です。 私芋、アヌキテクトにずっお、このレポヌトは、あなたが連絡した人ずあなたが賌読しようずしおいるものを海岞から理解し始めるこずができるずいう点で非垞に貎重です。




同じ郚屋で、次のような䞍快な質問をするこずができたすObjective-Cサポヌトがい぀入るか、Kotlin Nativeの゜ケットのような䟿利なラむブラリなど。 質問は䞍䟿ですが、Andreiはどういうわけか出おきたした:-)ネむティブに関しお倚くの質問がありたした。レポヌトは組み蟌みでのKotlinの䜿甚に぀いお真剣に議論したした。 ArduinoでのKotlinに぀いおの質問ず、れロコストの抜象化ず、サヌバヌずしおArduinoに぀いお曞く堎合、実際にはうんざりするずいう議論がありたした。


䞀般的に、レポヌトは非​​垞に具䜓的でした。 蚈画、野望、戊略に぀いお。




明らかに、すでに自分の未来をコトリンず結び぀けおいる人にずっお、それは非垞に重芁です。 他の皆のために...さお、レポヌトの特に「売れおいる」郚分はありたせんでした-「私を食べお」、「私を飲んで」、「私を買っお」、それは本圓に私を買収したした。 男は非垞に倪くなっおいるので、隅々たでパンフレットを売ったり振ったりする必芁すらありたせん。 䞀方、最初に地獄のコトリンがあなたのために䜕であるかを理解したい堎合-これは倧したこずではなく、いく぀かの間接的な兆候によっお決定する必芁がありたす。


私にずっお、このレポヌトの䞻な利点は、明瀺的に衚珟されおいないが、远跡可胜であるずいうアむデアにありたした。未来のコトリンは、珟圚のコトリンではありたせん。 今、䜕かがささいなこずに぀いお私を悩たすなら、それはおそらく将来修正されるでしょう。 特に、人々はメタプログラミングのようなこずを真剣に考えおいたす。これは、私にずっお、Golangの幅広いタスクのブロッカヌになりたした。 コンパむラぞのプラグむンがIDEのプラグむンに自動的になり、Golangコヌドゞェネレヌタヌを導入するずきに再び苊痛になり、解決する必芁があるずいうのは非垞に䟡倀のある考えです。 芁するに、Kotlinは玠晎らしい未来を䌎う戊略的決定ずみなすこずができたす。


7. Javaバむトコヌド怜蚌い぀、どのように、そしお無効にできたすか


スピヌカヌNikita LipskyExcelsior; 評䟡4.42±0.07。



プロットは、NikitaがJVMの構造に぀いお簡単な孊生レポヌトを䜜成したようなものです。




孊生だけでなく、成熟した経隓豊富な開発者も、基本的な知識にギャップがあり、バむトコヌド怜蚌がどのように機胜するかを理解しおいないこずがよくありたした。


GCのようなものは仕様では必芁ではなく、原則ずしおガベヌゞコレクションをオフにするこずができたすEpsilon GCを䜿甚するなど。 察照的に、バむトコヌドはJVMSでハヌドコヌディングされおおり、VMは同じバむトコヌドに同じ結果を返す必芁がありたす正しいかどうかに関係なく。 その結果、怜蚌者は䞀床曞かれた埌、それを忘れたす。 圓面は、Value Typeが怜蚌者の倉曎を必芁ずするこずを私たちは皆知っおいたす。したがっお、怜蚌者を曞いたこずのある人は䞖界䞭に䜕十人もいたす。Nikitaもその䞀人です。


このスラむドのレポヌト党䜓は次のずおりです。




「なぜ䌚議に出垭するのか」ず「メモを芋るのはなぜか」ずいう質問に察しお、むンタヌネットでこれらの問題に぀いおテキスト圢匏で銖尟䞀貫した声明を出すこずは困難です。


面癜い写真-内郚からクラスファむルを閲芧した人の数。 ほがホヌル党䜓。 うヌん、なぜ圌らはこれが必芁なのですか :-)正盎に蚀うず、JVMの基本を掘り䞋げおWebアプリをコヌディングする前に、そのような詳现を孊び始めるこずすら考えおいたせんでした実際はそうではありたせん。




最初に、Nikitaは、クラスファむルの構造、バむトコヌド、および呜什の皮類などに぀いお詳しく説明したす。


「億䞇長者になりたい」ずいうゲヌムがありたすが、 ギルテネのように 、およびさたざたな興味深い䟋。




次に、Nikitaずずもに、JVMの5番目の章からJVMにクラスをロヌドする段階ロヌド、リンク、初期化を実行したす。 怜蚌は、リンクフェヌズの最初の段階です。 その埌、怜蚌の詳现に進みたす。静的制玄ず構造的制玄のチェックです。 静的チェックは2぀のパスで行われたす。出力はメ゜ッドバむトコヌドの制埡フロヌグラフです。構造制玄は、たずえば、各呜什のスタックの深さが実行パスに察しお特定の倀でなければならないなど、より耇雑なこずをチェックしたす。


怜蚌者の魔法は静的ストリヌム解析で機胜したす。これは研究所でプログラミング理論たたはプログラム回路理論によっお説明されるこずがありたす。 ニキヌタがこの郚分を公開するのはどういうわけか耇雑すぎるこずはすぐに明らかになりたした-そしお、圌はストリヌム分析に関する講矩を行っおいるこずがわかりたす。 どういうわけか、この堎所での䌚議のプログラム委員䌚を通しお、材料などの半栌子に぀いお材料が挏れたした。




ただし、このすべおの芁玠は、スタックマップフレヌムや特定のバむトコヌドなど、ゞャビスタに銎染みのあるものに簡単に圓おはたりたす。 これに぀いおは、たくさんの良いむラストがありたす。 さらに、怜蚌タスクのリアルタむム、およびJava 5で実行された凊理を蚈算するこずもできたす。その埌、倚くの異なる玔粋に実甚的な事項に぀いお説明したす。


個人的には、このレポヌトは、バむトコヌド怜蚌 java -jar -Xverify:none MyApp を無効にする掚奚事項が玔粋な狂気であり、怜蚌者に察する批刀を扱うべきである理由に぀いお理論ず実践の䞡方の芳点から確固たる正圓化を䞎えたした懐疑論の倧郚分。 さらに、 ASMなどのラむブラリを䜿甚する堎合に非垞に圹立ちたすレポヌトの途䞭でASMの䜿甚に関する掚奚事項を瀺したす。


6. 春の呪いテスト


スピヌカヌキリル・トルカチョフアルファ研究所および゚フゲニヌ・ボリ゜フナダ・テクノロゞヌズ。 評䟡4.45±0.05。



これは玔粋に実甚的なレポヌトであり、マむクロサヌビスの䞀郚をテストし、レポヌトで説明されおいるさたざたな原則を適甚する方法を瀺したす。


これは、RESTずキュヌを備えた暙準アヌキテクチャを䜿甚したSpringで䜜成されたチャットのラむブデモなど、Web開発者の心に近いものが豊富にあるずいう点で、JVMデバむスに関する以前のレポヌトずは倧きく異なりたす。 トピックの問題は、玠早いアプロヌチを䜿甚するずすぐにロックアップできるものずバラバラになるもののトピックで怜蚎されたす。


簡単なトロヌリングの行為ずしお、スピヌカヌは任意のWebサヌビスではなく、Baruch Sadogursky @jbaruch ずYegor Bugaenko @ yegor256 の頭脳をテストしおいたす。 タスクの条件に応じお、Baruchの回答はキャッシュされ、Yegorは時間の経過ずずもに気が倉わる可胜性があり、回答する前に考えたすキュヌを䜿甚しおデヌタを受信したす。




このレポヌトに぀いお曞くこずはあたり意味がありたせん-あなたはただそれを芋なければなりたせん。 講挔者たちは、Springでのテストの基本を、生き生きず興味深い圢で瀺しおいたす-いく぀かの也燥した事実だけでなく、れロから実甚的なアプリケヌションたでの開発。 最初は倚くのこずが意図的に誀っお行われ、その埌、進化的な方法で理想にたで達しおいくのは興味深いこずです。


次回SpringずSpring Bootでプロゞェクトを行う必芁があるずきに、このレポヌトを必ず確認したす。 テストの分離を維持するために@SpringBootTest必芁な理由コンテキスト党䜓のテスト、プロパティの倉曎、特定の配列でのテストの䜜成-パッケヌゞ/構成/自動スキャンが@TestConfigurationになり@SpringBootConfiguration - @SpringBootTestシグナリングにのみ@SpringBootConfiguration必芁です圌は止めなければなりたせん。 䞀般に、Springを䜿甚したテストは迅速に実行できるこずが明らかになりたしたが、キャッシュは簡単に砎損するため、 @TestConfigurationは@TestConfigurationのみを䜿甚する必芁があり@TestConfiguration 。


私は繰り返したすが、このレポヌトでは、開発プロセス自䜓ずその進化の理解が、特定の結論の最終リストよりも重芁です。 もちろん、自分で同じ結論に達するこずができたすが、膚倧な時間を無駄に倱いたす。


5. 春-深くない


スピヌカヌEvgeny BorisovNaya Technologies; 評䟡4.46±0.05。



Zhenya Borisovによる別のレポヌト。これは、トップの「Curse of Spring Test」にすでに存圚するものを完党に補完したす。


レポヌトの結論は、最初のスラむドで突然䞎えられおいるので、それらを芋おいきたしょう。



ナヌゞヌンは、有名なスラむドからレポヌトを開始したす。




これは、なぜ開発者ずラむブでチャットし、䌚議に行き、最新の蚘録を芋る必芁があるのか​​ずいう問題です。 私は自分自身の蟛い面でゞェンダのこの芳察を感じたした春に぀いおの声明の重芁な郚分は嘘であるか、絶望的に時代遅れです。


たずえば、自己泚入のアむデア。 トランザクション性を䜿甚する堎合、独自のメ゜ッドを呌び出すBeanはthis䜿甚するのではなく、自身ぞのプロキシを䜿甚する必芁がありたす。 これを行うには、自分自身たたは自分自身ではなく、自分のプロキシを泚入する必芁がありたす。 この状況はどこから来たのか-Zhenyaは詳现に説明したす。 これはSpring 4.3たでは機胜したせんでしたが、 @Resourceアノテヌションを䜿甚できたしたが、時には機胜し、XMLでも垞に機胜しおいたした。 Spring 4.3以降、 @Autowiredず@Injectは機胜し始めたしたが、暙準のJava構成は機胜したせんJavaのセマンティクスではこのような厄介なこずは蚱可されたせん。 そしお、これにはすべお、Springトラッカヌでのバグの䜜成から4幎半かかりたした。


次の䟋は、砎壊されたPropertySourcesPlaceholderConfigurerです。 このこず正確には、そのカスタム実装がどれだけ私から血を飲んだのか。 Eugeneは、バヌゞョン4.2ではjavakonfigでstaticずしお指定する必芁がありそうでない堎合はすべお゚ラヌが発生する、最近のバヌゞョンでは@PropertySourceのみを指定できるか、Spring Bootの堎合はたったく指定できないず@PropertySourceたす。 これらの間には数幎もありたす。


ちなみに、䟋はナパヌムによっお利甚されおいたす。 たずえば、ビン間の埪環䟝存関係は、劻を自分に泚入する倫の䟋によっお瀺されおいたす。




これらの䟋から、ロゞックを@PostConstructでビゞネスロゞックの開始をブロックするのは悪いずいう考えに@PostConstructたした。 正盎なずころ、このようなアむデアは私の頭をよぎるこずさえありたせんでしたたあ、それは私が牛のコヌダヌだからです。結局のずころ、これらすべおの問題は慎重に遞択された束葉杖によっお解決されたす。 @Mainは、そのような束葉杖を正しく曞く方法を教えたす-自䜜の@Mainアノテヌションは、それを明確にしたす。


倧たかに蚀っお、eventListenerが䜜成されたすメ゜ッドの䞊の新しいコンポヌネントは@EventListenerアノテヌションであり、パラメヌタヌでは、どのむベントをキャッチするか。 ContextRefreshedEventが必芁ContextRefreshedEvent 。 次に、BeanDefinitionsを調べ、 @Main芋぀けおプルする必芁がありたす。 しかし、同時に、これらすべおをSpring Bootで動䜜させるには、特定の操䜜を実行する必芁がありたす。 ここでは、興味のある人すべおに぀いおは説明したせん。レポヌトをご芧ください。 さらに、Springに没頭しおいない人にずっおは、80文字を超える名前を持぀メ゜ッドのこの魔法は、ある皮のゲヌムのように思えたす。 ただし、このレポヌトでは、Mavenに䟝存関係を远加するだけでこのゲヌムをすべお自動的に接続する方法を瀺しおいるため、毎回この地獄に行く必芁はありたせん。


そしお、より倚くの興味深い、そしお時には完党に犁止さBeanFactoryPostProcessorおいるこずは、 BeanFactoryPostProcessorずSpringバヌゞョンのBeanFactoryPostProcessorたす。 私は、Zhenyaに぀いお十分に聞いお、これをすべお間違っお適甚した人々がいるず確信しおいたす。


䞀般に、このレポヌトにより、Spring、Spring Bootの仕組み、そしお最も重芁なこずずしお、javadocを読むだけでは理解できないむデオロギヌのニュアンスをよりよく理解できたす。 ここでは、経隓豊富なSpring Jediの介入ずアドバむスが必芁です。これはZhenyaです。 このレポヌトおよびZhenyaのその他のレポヌトは、暙準機胜が倱われ始めおいるため、すぐに確認する必芁があり、 BeanPostProcessorおよびBeanFactoryPostProcessorさらにBeanPostProcessorたいず考えおいたす。


4. 1人のHTTP / 2クラむアント゚ンゞニアがオヌバヌクロックした方法の物語


スピヌカヌSergey KuksenkoOracle; 評䟡4.47±0.06。



おそらく誰もが既に知っおいるように、HTTP / 2別名RFC 7540は、叀いチュヌブHTTP / 1.1を眮き換えるためにGoogleの玳士たたは他の誰かによっお発明されたプロトコルです。


埌続の物語の䞻な圹割は、/ 1.1から/ 2のいく぀かの違いによっお果たされたす。



基本的に、HTTP / 2は、以前の暙準の特定の問題を解決する非垞に䜎いバッキングです。


䞀方、OpenJDKには、JDK 110の䞀郚ずしおリリヌスされたが、ただJava SEの䞀郚になっおいない「HTTPクラむアント」であるJEP 110がありたす。 圌は監芖され、議論されるのに十分なほど釈攟された。 あなたが期埅するようなものに芋えたすURLを持぀コンストラクタヌ、同期および非同期APIなど。 クラむアントはナニバヌサルであり、HTTP / 1.1ずc / 2の䞡方で動䜜したす。




スピヌカヌずは、このクラむアントでパフォヌマンスの仕事に携わった人のこずで、埌で圌に぀いお話したす。 目暙は、合理的な時間内に適床に速いクラむアントを獲埗するこずです。


最初に、圌はそれをベンチマヌクしたした。おそらく、クラむアントにもあたり倉曎がないこずを期埅しお。 競合他瀟ずしお、Jettyクラむアントが比范に䜿甚されたした。




どういうわけかそれは悲しいこずに刀明したした。 この堎合、誰かがそれを芚えおいる堎合、 TCP_NODELAY既知の問題がありたした。 人々は時々、特によく知られおいる暪棒を単に忘れたす。 それにもかかわらず、セルゲむはこれらのすべおが䜕らかの秘密の知識ではなく、兞型的な孊校は非垞に簡単にグヌグルであり、初心者によっお勉匷されるず䞻匵しおいたす。


これが実際のパフォヌマンススペシャリストの頭の䞭でどのように機胜するのだろうか。 䞀郚のアマチュアではなく、本圓のアマチュアです。 圌は最埌の瞬間たでプロトコルの仕様を読みたせんでした。 圌はプロファむルを䜜成し、パフォヌマンステストを䜜成し、プロファむラヌむンタヌフェヌスを調べたしたが、倚くのリ゜ヌスを消費するファット関数が存圚するこずが刀明した最埌の瞬間にのみ仕様を読み䞊げたしたが、その名前からはそれらが䜕をしおいるのか明確ではありたせん。 ぀たり、反射は「垞に仕様を最初に読む」ものであり、おそらく最も正しいものではありたせん。


䞀方、仕様を読んでいるので、それらを泚意深く読んで、それに組み蟌たれたハックを䜿甚しおください。 必芁なハックを䜿甚した埌、クラむアントはJettyを远い越し始めたした-これが生呜を䞎える仕様の匷みです。


レポヌトでは、これらすべおが、HTTPクラむアントを䜜成するサブゞェクト領域からの実際のデヌタで瀺されおいたす。 たずえば、前の仕様䟋は、HTTP / 2でりィンドりを展開する手順によっお瀺されたした。 おそらく、聎衆の䞀郚にずっお、この質問はそれ自䜓に関連があり、そこにあるすくいのあるすべおの䟋は本圓に有甚です。 私にずっお、正盎なずころ、あたり良くありたせんでした。Webバむコヌディングの日々の実践では、通垞、このようなラむブラリを䞀床だけ、スヌパヌプロフェッショナルによっお曞かれたものを䜿甚したす。


さらに、面癜いラむフハックのセットがありたす。 パフォヌマンスアヌティストがミッションコントロヌルに1日䞭座っお、それに基づいおある皮の黒魔術を行うずいう神話がありたす。 Sergeyの実践では、ほずんどの堎合、ログをファむルに蚘録し、次のような即興の方法でそれらを確認したす。






その盎埌、ネットワヌクラむブラリで、クむックキュヌのグロヌバルロックの䞋に倪字のコヌドをリファクタリングする方法が明確に瀺されおいたす。 ロックは悪であり、単玔なリファクタリングで倚くを絞り出すこずができたす。


䞊行しお、神話は、GCからプヌルぞの移行が自動的に良い結果をもたらすこずを暎いおいたす。実際には、プヌルから䜕も埗られない状況に陥るこずはありたすが、プヌルなしで䜜業するすべおの䞍利な点がありたす。




ただたくさんの興味深いこずがありたすが、ハブラポストをスクリヌンショットの巚倧なコレクションに倉えるこずはできたせん必芁な堎合でも。


䞀般的に、このレポヌトは、ネットワヌクで䜜業しおいるパフォヌマンス゚ンゞニアのよく䌝わる考え方の感芚を残したす。 たた、おたけずしお、HTTPクラむアントを開発する兞型的なレヌキを順を远っお説明したす。


3. BPF Magicを䜿甚したJVMアプリケヌションの高速か぀安党な生産監芖


スピヌカヌSasha GoldshteinSela Group; 評䟡4.49±0.07。



そこで、最初の3぀に進みたす。 このレポヌトは特に理解しにくいものでした。 実際、この蚘事を曞くために、すべおの蚘録を倍速でレビュヌしたした。 サヌシャ自身は普通の人よりも速く話し、さらにレポヌト党䜓は英語です。 この組み合わせは本圓に脳を取り去るので、初めおそれを聞いおいるなら、暙準速床をオンにする必芁がありたす。


芁するに、C ++たたはPythonでアプリケヌションを監芖するために通垞䜿甚され、Sashaが犬を食べた゜フトりェアは、JVMアプリケヌションを監芖するためにも非垞に䜿甚できるずいうこずです。 もちろん、これはすべおLinux䞊で行われたす。


レポヌトのグロヌバルな目的は次のずおりです。




この点で、BPFずいう蚀葉はすぐに明らかになりたすが、倚くの人は疑っおいたせん。 原則ずしお、むンタヌネット䞊で同様のトピックに関する他のレポヌトを芋぀けるこずができたすが、Javaに関するものはありたせん。


このすばらしいレポヌト党䜓を台無しにするこずはしたせんが、小さな皮の話から始めたしょう。


レポヌトは、他の監芖ツヌルの開発状況を考慮に入れた議論から始たりたすすべおのツヌルは、新しい、安定した、および機胜停止に分類されたす。 たずえば、 ftrace 、 perf 、 SystemTapなどの安定したもの本番モゞュヌルを含むカヌネルモゞュヌルのコンパむルず動的なロヌドが必芁です。 新しいものがありたす SysDig 非垞にシンプルですが、機胜はほずんどありたせん、異なる蚀語のバむンダヌを䜿甚したBPF 。 dtrace for Linux 、 ktap 、 LTTngなどのdtrace for Linuxなど、他にも倚くのdtrace for Linuxがありたす。


さらに、JVMに぀いお孊習できるこずを確認したす。 JVMには、オンにしお倖郚゜フトりェアを䜿甚しお接続できる特別なトレヌディングポむントがあるこずがわかりたす。




さらに、Sashaはtplist tplist 。これはtplist -p `pidof java`ずしおtplist -p `pidof java`こずができたすtplist -p `pidof java` これはすべおフラットリストに衚瀺されるため、目で読む必芁はありたせん。


興味深いこずに、これらのすべおのポむントにはパラメヌタヌがあるため、 monitor__waitedをモニタヌするず、4぀のフィヌルド笊号付き、笊号なし、笊号なし、笊号付きの構造が芋぀かりたす。 残念ながら、倀の皮類に加えお、パラメヌタヌに぀いおは䜕も知りたせん。 ただし、最も䟿利な圢匏ではありたせんが、 .stpファむルで情報を開くこずはできたす。 少なくずも、そこから匕数名を匕き出すこずができたす。


さらに、 BPFに進むために、Sashaはprodでデバッグする必芁があるアプリケヌションの䟋を提䟛したす。異端がどのコヌドをコン゜ヌルに出力するかを理解するために、デバッガヌぞの接続が蚱可されおいない堎合。 タスクはひどいです、通垞の管理者は恐怖で圌女から逃げたす。 -XX:PreserveFramePointer 3のオヌバヌヘッドを䞎えるに接続する必芁があり、その埌BCCのtraceナヌティリティBCCたす。


 trace `SyS_write (arg1==1)` "%s", arg2' -U -p `pidof java` 

トレヌスは必ずルヌトの䞋で実行されたす。 次に、トレヌスこの堎合SyS_write曞き蟌み甚siskol、条件 (arg1==1) 、出力甚メッセヌゞ "%s", arg2 、-U-ナヌザヌスペヌス呌び出しスタック、 、そしおもちろんPIDでフィルタヌしたす。 どういうわけか次のようになりたす。




次に、以前に䜜成したスクリプト perf-map-agent create-java-perf-map を䜿甚しお、メ゜ッドアドレスをJavaの実際のメ゜ッド名に倉換したす。


その埌、私たちのチヌムの疲れを掘り䞋げる必芁がありたす。 必芁な行を衚瀺する特定の堎所を取埗したした。


あなたはあなたの補品にそのような焊点を絞るこずができたすそのようなチュヌニングに慣れおいない平均的な人はそれを魔法ず芋なし、䜕でも信じるこずができたす。 次回は、圌の考えを読んで死者をよみがえらせるこずができるこずを管理者に䌝えるこずができたす。


このレポヌトには、 BCCナヌティリティなど、高床なチュヌニングを䜿甚するこずで実際に説明されおいる玠晎らしいものが満茉されおいたす。


JavaアプリケヌションはSystem.gcでガベヌゞを頻繁に収集したすが、その理由を知りたいですか はい、 -XX:PreserveFramePointerを陀き、 -XX:PreserveFramePointer -XX:+ExtendedDTraceProbes有効にする-XX:PreserveFramePointerありたす。これは非垞に高䟡なオプションであり、䞀定に保぀こずはできたせん。 管理者に頻繁にオンずオフを切り替えるよう䟝頌する堎合、圌はあなたが本圓のネクロマンサヌではないこずを掚枬できたす実際、あなたはもっず悪いです-あなたは今、圌の脳を䜜るダビストです。 さお、その埌、サヌシャが語る地獄の儀匏を実行しおください method__entry自分自身をmethod__entry必芁がありたす。


さらに、サヌシャは、なぜperf悪いのかネタバレナヌザヌ空間で分析するためにデヌタを倧量にプッシュするおよびあらゆる皮類のものに぀いお説明したす。


GNU / LinuxプラットフォヌムでのJavaアプリケヌションのパフォヌマンスに関䞎しおいるすべおの人に、このレポヌトを聞いお結論を出すこずを匷くお勧めしたす。 これは絶察必芁です。


2. Hibernateを再び高速にする


スピヌカヌニコラむアリメンコフEPAM; 評䟡4.51±0.04。



Hibernateが2䜍のレポヌトのトップで芋なければならないこずは、ショックではないにしおも、驚きであるこずが刀明したした。 Hibernateはそのようなもので、 2001幎にリリヌスされたした 。 ここ数幎、圌に぀いおできるこずはすべお語られおいたせんか これを聞く人はただいたすか


泊たった。 しかし、これが本圓に良い報告であり、ニコラむ・アリメンコフがHibernateの倚様性を理解しおいるたさにその人である堎合にのみ。 5幎の間に、圌は「Why I hate Hibernate」や「​​Barefoot on the Hibernate rake」などの神聖なタむトルでレポヌトを提䟛しおきたした。リストは長く、䞀郚はYouTubeで芋るこずができたす。


タむトルで衚明された問題は本圓に私に近いず蚀いたいです。 人々はHibernateを誀っお䜿甚し、頭を䜿っお考えるこずを拒吊し、スマヌトな本を読たないで、「Hibernateは遅い」ず叫びたす。 䞀方では、それはそのような䞍快な感芚、哀れみず軜snのbetween蟱の亀差を匕き起こしたす。 䞀方、システムに、ほずんどのナヌザヌがほが17幎間䜿いこなすこずができないようなAPIがある堎合、そのようなAPIには明らかに問題がありたす。


最初のスラむドのニコラむは、これが圌の個人的な経隓にすぎないずいうトピックに関する免責事項を䜜成したす。 しかし、この堎合、私たちの経隓はたったく同じです。




レポヌトは、Hibernateずは䜕か、それが解決する問題に぀いおの小さな必須の玹介から始たりたす-すべおのデヌタベヌスのナニバヌサルOOPアダプタヌは、Hibernateが魔法のように動䜜しないこずを瀺したすが、内郚では同じJDBC、コンテナヌ内のJTAなどを䜿甚したす。さらに。 抜象化レベルのチェヌン党䜓を芋お、その䞀郚ず移行がパフォヌマンスに圱響を䞎える可胜性があるこずを理解し、それらを改善するためにそれらを枬定できる必芁がありたす。


枬定には、Hibernate自䜓のログ hibernate.generate_statistics=true 、 DEBUGレベルのロガヌorg.hibernate.statなどを䜿甚するか、 JMHでマむクロベンチマヌクを曞き蟌むこずをお勧めしたす。


デヌタベヌスに送信されるク゚リを確認するには、あらゆる皮類のデヌタ゜ヌスプロキシp6spy、datasource-proxiesなどを䜿甚し、生デヌタを監芖するこずをお勧めしたす。 䜕らかの皮類のカりントむンタヌセプタヌを配眮しお、デヌタベヌスに送信された物理リク゚ストの数を蚈算できたす。 そしおもちろん、Hibernate自䜓でク゚リロギングを有効にするこずができたす。


さらに、Nikolayは、比范的小さなリク゚ストであっおも、Hibernateログでどれだけ興味深い情報を読み取れるかを瀺しおいたす。 ログは悲鳎を䞊げ、すべおがあなたにずっお間違っおいるこずを叫び、あなたは緊急にそれをやり盎す必芁がありたす。 確かに、通垞、雷が鳎るたで誰もそれを読み取りたせん。ログを含めるこずは、ログの統蚈を読み取る方法、どこで、どの時間を費やしたかを瀺したす。


このレポヌトでは、調敎できる䞻芁な事項に぀いお説明しおいたす。 , JDBC, connection pool — , . , JDBC Session.doWork(), .


, , . , N+1. - , «, N+1 — , », 
 , . . — : , , , NamedEntityGraph ( Hibnerate, JPA, ).




, second level cache . , , Hibernate, second level cache, , , — - ( ). Query Cache .




, - , . - , Hibernate. ? , , — , Ruby. , , ( Hibernate) — « », . «» .



1. Shenandoah: ,


: (Red Hat); : 4.64 ± 0.04.



, . , .


. , ? : Hibernate (, ), Spring — . . Garbage Collector?


, , . , , . (, , — .)


, , , , , . , .


, . — Garbage Collector Shenandoah, . , . «Shenandoah» «» ( ) «á» ( ).


-, GC Handbook . , GC , — . — GC Handbook. .


— , GC. Shenandoah .




, Shenandoah , .




, , . , , , Shenandoah .


. — Concurrent Mark, GC, , . — !




( , Epsilon GC , ).


-- . , STW- , .




, STW, concurrent-, (incremental update snapshot-at-the-beginning — SATB).




, , :-)




, init mark final mark — rootset, — .


, concurrent copy — , concurrent mark. , stop the world.




, , — . Garbage Collection, . , Garbage Collection .


, , Joker 2017, .


:



おわりに


JPoint 2017 . , .


. .


JPoint , , . , 6-7 , - JPoint 2018 , , . .



Source: https://habr.com/ru/post/J346364/


All Articles