エンタープライズjava環境における マイクロサービス・アーキ...

41
© 2013 IBM Corporation エンタープライズJava環境における マイクロサービス・アーキテクチャーの必要性 2015/7/29 日本アイ・ビー・エム株式会社 IBM Systems アプリケーションプラットフォーム テクニカル・セールス 田中 孝清

Upload: others

Post on 27-May-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2013 IBM Corporation

エンタープライズJava環境におけるマイクロサービス・アーキテクチャーの必要性

2015/7/29日本アイ・ビー・エム株式会社IBM Systems アプリケーションプラットフォームテクニカル・セールス 田中 孝清

Page 2: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation2

Microservices Architecture

Page 3: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

Microservices Architecture(MSA)とは

きっかけ

–ソフトウェア・

アーキテクチャーの大家

マーティン・ファウラーの

2014年3月の

Blogエントリー

3

http://martinfowler.com/articles/microservices.html

Page 4: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

Microservices Architectureの基本思想

技術面:分散配置と統合

–サービスによるコンポーネント化

–スマートなエンドポイントと単純なパイプ処理

–分散データマネジメント

–インフラの自動化

–フェイルを前提とした設計

文化面:持続性と分権

–ビジネスケイパビリティに基づく組織化

–プロジェクトではなくプロダクト

–分散ガバナンス

–進化的な設計

4

グロースエクスパートナーズ(株)鈴木雄介氏「マイクロサービスアーキテクチャとは何か」より

http://www.slideshare.net/yusuke/msa-share-02

Page 5: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

Microservices Architectureアプリケーション

単一の(モノリシックな)アプリとして実装するのではなく,複数のサービスの統合として実装する– 変更の影響範囲を極小化

– 機能の再利用を促進

5 http://martinfowler.com/articles/microservices.html

Page 6: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

どこかで聞き覚えが・・・

SOA:Service Oriented Architecture

6

2004〜IBM,Gartner他

Page 7: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

Microservices ArchitectureはSOAの進化型

モノリシック・アプリケーション

–全体を単一のコードとして実装

SOA(サービス指向アーキテクチャー)

–サブシステムごとに独立して実装/依存関係が可視化

MSA(マイクロサービス・アーキテクチャー)

–システムを構成する機能(ファンクション)単位でサービス化

7

Monolithic App SOA Micro-services

Page 8: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

粒度を細かくして機能単位のスケールアウトを実現

小さなサービス単位でプロセスを起動することで負荷に応じた柔軟なスケールアウト(拡張)が可能に

8

http://martinfowler.com/articles/microservices.html

Page 9: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

結局Microservice Architectureとは

SOAを追求し,改善を続けていったらMSAになった

–SOAからのいくつかの改良

• サービスの粒度は「企業の組織単位」ではなく「業務の機能単位」で

• 通信経路は高機能なSOAP通信ではなく単純なREST通信も活用

• ESBは必須ではなくメッシュ型の直接呼び出しもOK

「新しく考え出された理想論」ではなく多くの成功したWebシステムのに共通する「観測された現実解」に名前をつけたもの

9

Page 10: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

SOA / MSA導入の目的

変化への対応を早く

10

オペレーションのスピードミッション・クリティカルなアプリケーションの管理、運用

Systems of Record

マラソンランナー

サービスレベル重視 ウォーターフォール開発

長期に渡るシステム構築

数ヶ月〜数年

イノベーションのスピード成長機会のための

探索、開発、デプロイSystems of Engagement

スプリンター

スピード開発 試行錯誤、継続的デプロイ

早期のシステム構築/改修

数日〜数週間

Page 11: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation11

MSAを必要とする「変化」とは

Page 12: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

企業のITシステムが直面する大きな変化

クライアント・ブラウザの進化

モバイルへの対応

外部システム連携・APIエコシステム

12

Page 13: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

企業のITシステムが直面する大きな変化(1)

クライアント・ブラウザの進化

モバイルへの対応

外部システム連携・APIエコシステム

13

Page 14: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

クライアント・ブラウザの変化

MSIE 6 全盛期(2000年代〜)– Windows XP+MSIE 6をターゲットにすればよかった

– HTML4によるフォーム型Webアプリケーション

マルチ・ブラウザ時代(2010年代〜)– Firefox / Google Chrome / Safariなどモダンブラウザの台頭

– MSIEが7から11まで進化 / Windows 10ではEdgeが標準に

– HTML5によるSPA型Webアプリケーション

14

+

Page 15: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

今まで以上にPLとBLの分離が必要に

プレゼンテーション・ロジック(PL)の変化と

ビジネス・ロジック(BL)の変化の速度の大きな不一致

–頻繁な変更を要求されるプレゼンテーションロジック

–長期にわたって使用されるビジネスロジック

独立したシステムとして構築するメリットが増大

–PLとBLをサービスとして連携

15

ビジネスロジック

プレゼンテーションロジック

Page 16: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

Webアプリケーションの実装スタイルの変化

「サーバーサイドMVC」から「クライアントMVC」へ

16

Web Browser

Application Server

Application

HTTP

RequestHTML/JS

Controller Session

Data

ViewBusiness

LogicModel

DomainDomain

Web Browser

Application Server

Application

View

HTML/JS

Controller

Data

Store

Model

Model

DomainDomain

RESTful or

WebSocketJSON

Business Logic

Page 17: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

企業のITシステムが直面する大きな変化(2)

クライアント・ブラウザの進化

モバイルへの対応

外部システム連携・APIエコシステム

17

Page 18: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

モバイル機器の急速な普及

18

Source: Wikipedia http://en.wikipedia.org/wiki/Mobile_operating_system

世界 スマートフォン売り上げ台数(単位:千)

Page 19: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

Webからモバイルアプリケーションへ

モバイル対応の第一段階

–Webアプリケーションの画面をモバイル用にカスタマイズ

本格的なモバイル対応

–モバイル・アプリケーションの実装

• モバイル環境に最適化されたUI

• GPSやカメラなどの機能の活用

• オフライン処理

19

Page 20: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

モバイルアプリケーションのバックエンド連携

モバイルアプリケーションは(多くの場合MEAP経由で)バックエンドシステムをサービスとして利用

–必然的にSOA / MSAになる

20

MEAP製品

Mobile

Enterprise

Application

PlatformESB製品

SOAP /

HTTP

REST 基幹システムやクラウド・サービス

基幹システムやクラウド・サービス

基幹システムやクラウド・サービス

Page 21: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

企業ITシステムが直面する大きな変化(3)

クライアント・ブラウザの進化

モバイルへの対応

外部システム連携・APIエコシステム

21

Page 22: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

APIの提供や活用による効果

22

APIの提供 APIの活用

• Assembly• Transformation• Rationalization

• Discovery• Composition• Deployment

Assets & Services

Application End Points

新たなチャネルによる収益の増大

今までにない新しい顧客体験の実現

外部 APIs

パートナー APIs

社内 APIs

Page 23: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

実例:SNSアカウントをつかったログイン

メリット

–利用者を煩雑なユーザー登録処理から解放

–万が一の情報漏洩発生時のリスクを軽減

–SNS上のバイラル(口コミ)マーケティングの促進

デメリット

–頻発する外部システムの仕様変更への追随

23

Page 24: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation24

アプリケーション・アーキテクチャーの刷新

Page 25: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

変革期を迎えているエンタープライズJava

2000年代に多くの企業でJavaを使用した業務アプリケーションのWeb化を実施

–J2EEアーキテクチャー

–Struts / Spring / Hibernate などのOSSフレームワークの活用

更新と改良をつづけてきたアプリケーションの中には現行アーキテクチャーの限界がみえてきたものも多い

–Strutsなどのサポート終了とセキュリティ脆弱性問題

–旧APIのみを使用したアプリを互換性モードで稼働

–最新の要件への対応ができない

大きく進歩したJava EE 7の登場

25

Page 26: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

式年遷宮と増改築

数年に一度,いちから作り直す神社

26

あなたのITシステムは「増築を重ねた温泉旅館」になってませんか?

増築と改築を重ねた温泉旅館

Page 27: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

ITシステムの「式年遷宮」のすすめ

一定期間毎に,新しいアーキテクチャーで再実装する効果

–使用しているH/Wやミドルウェアの陳腐化の影響を排除

–新しいアプリケーション・アーキテクチャーの取り入れ

–世代を超えてシステムの構築スキル・構成知識を継承

システムの寿命を超えて使い続けると・・・

–長期延長保守のための高額なサポート費用

–時代のニーズを満たせない旧式のアプリケーション

–構築した技術者の引退とともにシステムがブラックボックス化

27

Page 28: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

次世代をみすえ最新のアーキテクチャーへの移行を

アプリケーション・アーキテクチャ

–モバイル・HTML5クライアントへの対応

–Microservices Architectureの採用

–APIエコシステムの構築

アプリケーション開発体制

–Agile開発・継続的インテグレーション

–DevOpsの実現

アプリケーション実行基盤

–クラウド環境の利用

–構築の自動化・Immutable Infrastructure

28

Page 29: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation29

Java EE 7とWAS Libertyプロファイル

Page 30: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

2013年に正式版となった最新仕様:Java EE 7

Java EE 7の三つのゴール

–HTML5環境への対応

–開発生産性の向上

–エンタープライズ・ニーズへの対応

30

大幅な機能拡張

Page 31: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

Java EE 7 の主なAPI群

JSR 342: Java Platform, Enterprise Edition 7

–HTML5環境への対応

• JSR 344: JavaServer Faces (JSF) 2.2

• JSR 353: Java API for JSON Processing (JSONP) 1.0

• JSR 356: Java API for WebSocket 1.0

• JSR 339: Java API for RESTful Web Services (JAX-RS) 2.0

–開発生産性の向上

• JSR 345: Enterprise JavaBeans (EJB) 3.2

• JSR 346: Contexts and Dependency Injection

for Java EE (CDI) 1.1

• JSR 907: Java Transaction API (JTA) 1.2

• JSR 349: Bean Validation 1.1

–エンタープライズ・ニーズへの対応

• JSR 343: Java Message Service (JMS) 2.0

• JSR 338: Java Persistence API (JPA) 2.1

• JSR 236: Concurrency Utilities for Java EE 1.0

• JSR 352: Batch Applications for the Java Platform 1.0

31

Page 32: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

JAX-RS 2.0:JavaでRESTfulなWebサービスを実現

アノテーションベースでRESTfulなWebサービスを実装

JAX-RS 2.0の新機能

–クライアント用のAPI

–非同期クライアント・非同期サーバー

–メッセージ・フィルタおよびエンティティ・インターセプター

• ヘッダやコンテンツを操作するインターセプター

32

Response response = ClientBuilder.newClient().target("http://www.foo.com/book").request(MediaType.TEXT_PLAIN).get();

@Path("repository")public class TestRepositoryService {@Path("version")@GET@Produces("text/plain; charset=UTF-8")public String getVersion() {return "Test Service version 1.0";

}

Page 33: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

CDIによるアプリケーション内のPL / BLの分離

画面デザイン

–JSF / EL / Servlet / JSP

外部連携

–JAX-RS / WebSocket

–JAX-WS

33

依存性注入・ビジネスロジック

–CDI / EJB / JTA

DB連携・ORマッピング

–JPA

JSF

JSP / EL

JAX-RS

WebSocket

CDI .

EJB / JTA

JPA Database

Page 34: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

CDI使用のメリット

外部接続のパラメーターのハードコーディングの防止

–ネーミングサービス利用からアノテーション指定へ

コンポーネント間の依存性の除去

–モックやスタブを利用したテストが容易に

34

@InjectService s;

実際のサービス実装

テスト用のスタブ

業務DB

ダミーデータ

本番環境でインジェクション

テスト環境でインジェクション

Page 35: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

WebSphere Application Server Java EE7対応

IBMのWAS Libertyプロファイルは6月25日出荷のV8.5.5.6でJava EE 7のFull Platformに対応

35

http://www.ibm.com/jp/press/2015/06/1601.html

Page 36: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation36

WASの新しいランタイム:Libertyプロファイル

WAS V8.5.5 Liberty & WDT

Java EE 7準拠Java EE 7のFull Platform標準に準拠したアプリを完全サポート

JAX-WS, JAX-RS, JMSもサポート

Unzipによる導入とデプロイパッケージをした

サーバー + アプリ + 構成情報をUnzipでデプロイ可能

簡単な構成と動的変更最低限必要な構成ファイルは

server.xmlひとつだけデフォルトベースで簡単構成構成変更は再起動なしに反映

軽量ランタイムメモリー使用量が小さい: 60MB程度〜

ディスク使用量も100MB以下

起動が速い

起動時間: 5秒程度

統合ツール(WDT)高機能なEclipse用の連携ツールを無償で提供

Eclipseから簡単に使用可能

自動化ツールとの連携多くのOSSツールに

無償でプラグインを提供

Page 37: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

API・サーバー機能をFeatureとして定義 必要なものだけを構成

– 設定されたものだけがメモリにロード・初期化される→ 最小限の起動時間・メモリー使用

ServletJSPJDBCSSL

JAX-RS

sessionDatabase

<featureManager><feature>jsp-2.3</feature><feature>jdbc-4.1</feature><feature>jaxrs-2.0</feature><feature>sessionDatabase-1.0</feature><feature>ssl-1.0</feature>

</featureManager>

構成ファイル server.xml依存関係も自動的に解決

JSON

Page 38: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

Libertyプロファイルで提供されているFeature(抜粋)

38

zosSecurity-1.0 zosTransaction-1.0 zosWlm-1.0

zosConnect-1.0

zosLocalAdapters-1.0

scalingController-1.0

scalingMember-1.0

dynamicRouting-1.0

collectiveController-1.0 clusterMember-1.0

mongodb-2.0wsSecurity-1.1

wmqJmsClient-1.1

wasJmsServer-1.0

jmsMdb-3.1

wasJmsClient-1.1jaxws-2.2

jaxb-2.2

wasJmsSecurity-1.0 jca-1.6couchdb-1.0

jcaInboundSecurity-1.6mdb-3.1

jms-1.1

zOS

ND

webProfile-6.0wab-1.0

concurrent-1.0

collectiveMember-1.0

restConnector-1.0

sessionDatabase-1.0

ldapRegistry-3.0

webCache-1.0

jaxrs-1.1

distributedMap-1.0

osgiConsole-1.0

json-1.0

timedOperations-1.0monitor-1.0

oauth-2.0

blueprint-1.0

adminCenter-1.0

openid-2.0

openidConnectServer-1.0

openidConnectClient-1.0

serverStatus-1.0 spnego-1.0

osgiAppIntegration-1.0Core

servlet-3.0

jsp-2.2

jsf-2.0

ejbLite-3.1 jdbc-4.0

jndi-1.0

appSecurity-2.0

managedBeans-1.0

ssl-1.0

beanValidation-1.0

cdi-1.0

jpa-2.0 jsp-2.3

el-3.0

websocket-1.1

jdbc-4.1

servlet-3.1

websocket-1.0

jsonp-1.0

Base

spnego-1.0

osgiAppIntegration-1.0

jsp-2.3

el-3.0

websocket-1.1

jdbc-4.1

zosConnect-1.0

zosLocalAdapters-1.0

scalingController-1.0

scalingMember-1.0

dynamicRouting-1.0

couchdb-1.0

openid-2.0

openidConnectServer-1.0

openidConnectClient-1.0

servlet-3.1

websocket-1.0

jsonp-1.0

New in

1Q15

New in

4Q14

Page 39: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

パッケージ作成による複数環境の導入

開発環境でテストしたアプリケーションだけでなく製品の構成・Fixpackレベルまでふくめてそのまま本番環境へ移行することが可能

–サービス単位でZIPを作成

–使用するFeatureだけパッケージされるので最小サイズのZIPに

–必要に応じて展開・実行することで容易にスケールアウト

39

開発環境

Java SDK

Liberty Profile

サーバー構成

アプリ

①インストール

ディスク

②サーバー構成

③アプリ開発

テスト・本番環境

Java SDK

Liberty Profile

サーバー構成

アプリ

ディスク

ZIPファイル

④パッケージ ⑤展開

Page 40: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation

Libertyとマイクロサービスの記事を公開中

JAX-RS/CDIのサポートでマイクロサービスの開発も容易に〜Java EE 7正式対応で

大幅強化された「WebSphere Application

Server Liberty Core」

Codezine マイクロサービスで検索

40

http://codezine.jp/article/detail/8834

Page 41: エンタープライズJava環境における マイクロサービス・アーキ …public.dhe.ibm.com/software/dw/jp/websphere/was/... · 「マイクロサービスアーキテクチャとは何か」より

© 2015 IBM Corporation41